folder Tahribat.com Forumları
linefolder Python
linefolder Python List Comprehension



Python List Comprehension

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nposeLx
    nposeLx's avatar
    Kayıt Tarihi: 14/Ağustos/2017
    Erkek

    Merhabalar,

    Dersleri izleyerek yeni yeni öğrenmeye çalışıyorum. Sorduğum sorular biraz saçma gelirse hoş görün lütfen.

    Benden 1-100 arasında (100 dahil) çift sayıları alıp bir liste halinde ekrana yazdırmam isteniyor. Bende aşağıdaki şekilde bir kod yazdım.

     

    sayilar = [*range(0,101)]
    
    for x in sayilar : 
        if x%2==0:
            print(sayilar[x])
            

    Bunu kodu nasıl daha farklı yazabilirim kısmında düşünürken, egzersiz olarak bakındığım kaynakta çözüm şu şekilde yapılmış.

    liste = [x for x in range(1,101) if x % 2 == 0]
    
    print(liste)

    Burada 2 sorum var.


    İlki; Aşağıdaki kod bloğunda çıktı yatay olarak geliyor, benim kodumda ise dikey. Bunu çeviremedim. Yolu varsa unutmuş olmalıyım. Araştırdığımda nedenini yakalayamadım. Bu gibi durumlarda ne yapabilirim ? - Bunun için direkt kaynağı verebilirseniz, oradan okuyarak uğraşabilirim.Böylesi daha aklımda kalabilir.

    İkinci ise ; x for x in range .. diye devam eden (2. kod blogu) satırı tercüme edemedim. Yukarıda yazdığım şekilde çok örnek gördüğüm için aşağıdakini yorumlamada zorlandım. Bunu sizler nasıl okuduğunuzu paylaşabilir misiniz? Kendime de anlayabileceğim şekilde ifade edebilmek için yol gösterecektir.


    Yardımlarınız için teşekkürler.

     

    #edit imla

    nposeLx tarafından 20/Şub/23 20:41 tarihinde düzenlenmiştir
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Gizem
    sLeymN
    sLeymN's avatar
    Kayıt Tarihi: 31/Mart/2008
    Erkek

    İlki; Aşağıdaki kod bloğunda çıktı yatay olarak geliyor, benim kodumda ise dikey. Bunu çeviremedim.

    -- sen her seferinde dizinin bir elemanını yazdırıyorsun  ( print(sayilar[x]) ) böyle olunca print fonksiyonu her seferinde alt satıra geçiyor, diğer örnekte ise tüm diziyi tek bir kerede yazdırıyor ardından alt satıra geçiyor.

     

    İkinci ise ; x for x in range .. diye devam eden (2. kod blogu) satırı tercüme edemedim.

    -- range fonksiyonu (https://www.w3schools.com/python/ref_func_range.asp) senin verdiğin aralıkta bir sayı sekansı dönüyor ( range(1,101) ), sen for  ( for x in range(1,101) )ile bu sekans üzerinde ilerleyip if ile 2mod u kontrol edip ( if x % 2 == 0 ) uyanları listeye ekliyorsun.  Ardından yukarıda da dediğim gibi tek bir kerede bu listeyi yazdırıyorsun. 

     


    Cehennemin dibine kadar yolum var daha.. || Nasılsa her yalnız kendine sürgündür Asmera unutma.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nposeLx
    nposeLx's avatar
    Kayıt Tarihi: 14/Ağustos/2017
    Erkek
    sLeymN bunu yazdı

    İlki; Aşağıdaki kod bloğunda çıktı yatay olarak geliyor, benim kodumda ise dikey. Bunu çeviremedim.

    -- sen her seferinde dizinin bir elemanını yazdırıyorsun  ( print(sayilar[x]) ) böyle olunca print fonksiyonu her seferinde alt satıra geçiyor, diğer örnekte ise tüm diziyi tek bir kerede yazdırıyor ardından alt satıra geçiyor.

     

    İkinci ise ; x for x in range .. diye devam eden (2. kod blogu) satırı tercüme edemedim.

    -- range fonksiyonu (https://www.w3schools.com/python/ref_func_range.asp) senin verdiğin aralıkta bir sayı sekansı dönüyor ( range(1,101) ), sen for  ( for x in range(1,101) )ile bu sekans üzerinde ilerleyip if ile 2mod u kontrol edip ( if x % 2 == 0 ) uyanları listeye ekliyorsun.  Ardından yukarıda da dediğim gibi tek bir kerede bu listeyi yazdırıyorsun. 

     

    Yorumunuz için teşekkürler.Dediğine göre, printten çıkarmaya çalıştım.
     Aşağıdaki şekilde denedim, istediğim şekilde çıktıyı verdi.

    sayilar = [*range(0,101)]
    
    for x in sayilar : 
        if x%2==0:
            sayilar[x] = x
    
    print(sayilar)
    


    İkinci için aslında kodu nasıl okuyorsunuz?  sadece bu kod bloğunu okurken nasıl doğru ifade edilir onu merak ettim. Çünkü örnekler hep yukarıdaki gibi bir kod bloğu ile veriliyor hemen hemen. Aşağıdakina aşina olmayınca türkçeye çevirmede zorlandım kafada. Kusuruma bakmayın. 

    liste = [x for x in range(1,101) if x % 2 == 0]





  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    end
    end's avatar
    Kayıt Tarihi: 16/Ekim/2016
    Erkek

    ikinci sorun:

    one line for loop aslinda o.

    https://wiki.python.org/moin/Powerful%20Python%20One-Liners

    [cikti for cikti in dizi/iterable (kosul)]

    print([sayi * 2 for sayi in [1,2,3,4,5,6] if sayi % 2 == 0])

     

    illa kosul olmak zorunda da degil.

    [">"*3 + str + "ro" for str in ["kaka", "toto", "bobo"]]

     

    ilk sorun:

    sen for loop icerisinde tek tek print ediyorsun sayilarini, digerinde direkt list'i print ediyorsun.

     

    boyle yaparsan benzer cikti alabilirsin.

    sayilar = [*range(0,101)]
    cift_sayilar = []
    for x in sayilar : 
        if x%2==0:
            cift_sayilar.append(sayilar[x])
    print(cift_sayilar)

     

     

    end tarafından 20/Şub/23 21:49 tarihinde düzenlenmiştir

    0x0480 takilin madem ﷽﷽﷽
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nposeLx
    nposeLx's avatar
    Kayıt Tarihi: 14/Ağustos/2017
    Erkek
    end bunu yazdı

    ikinci sorun:

    one line for loop aslinda o.

    https://wiki.python.org/moin/Powerful%20Python%20One-Liners

    [cikti for cikti in dizi/iterable (kosul)]

    print([sayi * 2 for sayi in [1,2,3,4,5,6] if sayi % 2 == 0])

     

    illa kosul olmak zorunda da degil.

    [">"*3 + str + "ro" for str in ["kaka", "toto", "bobo"]]

     

    ilk sorun:

    sen for loop icerisinde tek tek print ediyorsun sayilarini, digerinde direkt list'i print ediyorsun.

     

    boyle yaparsan benzer cikti alabilirsin.

    sayilar = [*range(0,101)]
    cift_sayilar = []
    for x in sayilar : 
        if x%2==0:
            cift_sayilar.append(sayilar[x])
    print(cift_sayilar)

     

     

    Çok teşekkür ederim. "one line for loop" için kaynağı gözden kaçırmamak için kaydettim. Örnek için de ayrıca teşekkür ederim. Kodu şu an okumaya çalıştığımda biraz daha rahat ettim. Bu gibi basit alıştırmalar için denemeye çalışacağım.
    Destekleriniz için teşekkür ederim. 

     

    nposeLx tarafından 20/Şub/23 22:00 tarihinde düzenlenmiştir
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    range(start, stop, step)

    start = başlangıç = 2 (ilk çift)

    stop = son sayı (dahil değil) = 101

    step = iki çift ardışık sayı arasındaki fark = 2

     

    range(2, 101, 2)

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cukurova
    cukurova's avatar
    Kayıt Tarihi: 21/Aralık/2003
    Erkek

    Her iki sorunada arkadaşlar güzel cevaplar vermişler aslında. Python da One-Line code için; Christian Mayer'in Python One-Liners: Write Concise, Eloquent Python Like a Professional kitabının pdf nette bulursun. Bir çok soruna cevap verecektir.

    liste = [x for x in range(1,101) if x % 2 == 0] dizini yazdırmak için aklıma gelen tek satırlık örnekler;

    1-) >>> for line in liste: print(line)

    2-) >>> print(*liste, sep='\n')

    3-) >>> print("\n".join(liste))    # bu örnek sadece string listelerde çalışır, çünkü her değer başına newline ekliyor.

    Eğer sonuçları sadece ekrana yazdırman gerekliyse, (bir listeye kaydetmen gerekmiyorsa) tek satırsa şu işini görür;

    >>> [print(x) for x in range(1,101) if x % 2 == 0]

     

     

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Realseyler
    Realseyler's avatar
    Kayıt Tarihi: 18/Nisan/2020
    Erkek

    Chetgbt sonucu. 

    İlk örnek

    liste = [i for i in range(2, 101, 2)]
    print(liste)....

    İkinci örnek 

     

    # boş bir liste oluşturun
    cift_sayilar = []

    # 1'den 100'e kadar tüm sayıları kontrol edin
    for sayi in range(1, 101):
    # Sayı çift ise, listeye ekleyin
    if sayi % 2 == 0:
    cift_sayilar.append(sayi)

    # Sonuçları yazdırın
    print(cift_sayilar)

     

     

     

     

     


    Baktığınız benim gördüğünüz sizsiniz
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    emirhan-exp
    emirhan-exp's avatar
    Kayıt Tarihi: 10/Ocak/2010
    Erkek

    Hocam basic en mantıklı dil ya. 

  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nposeLx
    nposeLx's avatar
    Kayıt Tarihi: 14/Ağustos/2017
    Erkek

    Herkese ayrı ayrı teşekkürler. 

    @YekteranBaymedir , range direkt bu şekilde kullanabilirmişim. Sanırım alıştırma yapayım derken o an bunu düşünemedim, çok sağolun. :) 

    @cukurova kaynak için ayrıca teşekkürler. Google ile birçok link buldum. Mesaiden sonra fırsat yaratacağım.

    @Realseyler chatgp bir alternatifti ama ben direkt olarak bir kod bloğunun türkçe meali nedir kıvamında sordugumda tam açıklayıcı gelmedi.oradan hazır kod almak benim şu anki seviyemde kaçamak olur :)

  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    end
    end's avatar
    Kayıt Tarihi: 16/Ekim/2016
    Erkek
    emirhan-exp bunu yazdı

    Hocam basic en mantıklı dil ya. 

    yok abi yaaa en iyisi cobol


    0x0480 takilin madem ﷽﷽﷽
Toplam Hit: 3080 Toplam Mesaj: 18
python