Python List Comprehension
-
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 -
İ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.
-
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]
-
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 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. -
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)
-
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]
-
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) -
Hocam basic en mantıklı dil ya.
-
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 :)
-
emirhan-exp bunu yazdı
Hocam basic en mantıklı dil ya.
yok abi yaaa en iyisi cobol