liste = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]]
tümü = [z for i in liste for z in i]
print(tümü)
Şu olayı bir türlü anlayamadım. Bu kodu okumaya nereden başlıyoruz, sağdan sola mı, soldan sağ mı okuyoruz… Mantığını bir türlü oturtamadım yardımcı olur musunuz? Adım adım anlatabilecekseniz gerçekten çok mutlu olurum.
Bu listelerden oluşan bir listeyi “düzlemek” için kullanılan kalıplardan bir tanesi. 2’den fazla for ile list-comprehension çok okunabilir olmayacağı gibi büyük ihtimalle itertools.product ve benzeri ile sadeleştirilebilir. Hatta 2 tane for ile olan da çok okunabilir sayılmaz. Belki şöyle yazılabilir ama
duz = [eleman
for alt_liste in liste
for eleman in alt_liste]
Aslında tek bir liste üreteci var zira tek bir liste üretiliyor :ğ iki tane olan for
Bir liste nested değilse flat'dir. nested = iç içe, flat = düz. Yani tek boyutlu listeler flat listelerdir. 2 veya daha fazla boyutu olan listeler nested list olur.
# flat list
[i * j for i in range(10) for j in range(10)]
# nested list
[[i * j for i in range(10)] for j in range(10)]
İsterseniz kendinize göre yeni isimler üretin ama mevcut bir terminoloji var, bana göre oldukça da açık. Sizin multiple list comprension dediğiniz iterasyon sayısını artırmak sadece.
Kusura bakmayın, ben “her ikisinide” derken bildiğimiz basit liste üreteçleri ile içerisinde birden fazla döngü bulunduran liste üreteçlerini kast etmiştim.
“Liste üreteçleri” dilin kendisinin de dediği üzere. Diğeri de “İç içe liste üreteçleri” yine dilin tanımladığı şekilde. Yani 2 kısma ayırmışlar. Dolayısıyla sayın PRIME’ın sorduğuna direkt “liste üreteci” diyoruz.