En iyi bilgi kaynağı , liste kavrayışlarıyla ilgili resmi Python eğitimidir . Liste anlamaları, döngülerle hemen hemen aynıdır (kesinlikle herhangi bir liste anlama, bir for döngüsü olarak yazılabilir) ancak genellikle bir for döngüsü kullanmaktan daha hızlıdır.
Öğreticiden bu daha uzun liste anlayışına bakın ( if
bölüm, anlamayı filtreler, yalnızca if ifadesini geçen bölümler liste anlayışının son bölümüne aktarılır (burada (x,y)
):
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
Bu yuvalanmış for döngüsü ile tamamen aynıdır (ve öğreticide de söylendiği gibi, for ve if sırasının nasıl aynı olduğuna dikkat edin).
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
Bir liste anlama ile bir for döngüsü arasındaki en büyük fark , for döngüsünün son kısmının (bir şeyi yaptığınız yer) sonunda değil, başında gelmesidir.
Sorularınıza gelince:
Bunu for döngü yapısını kullanmak için nesne ne tür olmalıdır?
Bir iterable . Bir (sonlu) öğe kümesi oluşturabilen herhangi bir nesne. Bunlara herhangi bir kap, liste, set, jeneratör vb. Dahildir.
İ ve j'nin nesnedeki öğelere atanma sırası nedir?
Her listeden oluşturuldukları gibi tam olarak aynı sırada atanırlar, sanki iç içe geçmiş bir döngü içindeymiş gibi (ilk kavrayışınız için i için 1 öğe, ardından j'den her değer, 2. öğeden i'ye, sonra j'den her değer, vb.)
Farklı bir for döngüsü yapısı ile simüle edilebilir mi?
Evet, yukarıda zaten gösterilmiştir.
Bu for döngüsü, benzer veya farklı bir yapı for döngüsü ile iç içe olabilir mi? Ve nasıl görünürdü?
Elbette, ama bu harika bir fikir değil. Burada, örneğin size karakter listelerinin bir listesini verir:
[[ch for ch in word] for word in ("apple", "banana", "pear", "the", "hello")]