Sumber informasi terbaik adalah tutorial resmi Python tentang pemahaman daftar . Pemahaman daftar hampir sama dengan for loop (tentu saja pemahaman daftar apa pun dapat ditulis sebagai loop-for) tetapi seringkali lebih cepat daripada menggunakan for loop.
Lihatlah pemahaman daftar yang lebih panjang ini dari tutorial ( if
bagian menyaring pemahaman, hanya bagian yang melewati pernyataan if yang diteruskan ke bagian akhir dari pemahaman daftar (di sini (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)]
Ini persis sama dengan loop for bersarang ini (dan, seperti yang dikatakan tutorial, perhatikan bagaimana urutan for dan if adalah sama).
>>> 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)]
Utama perbedaan antara daftar pemahaman dan untuk loop adalah bahwa bagian akhir dari untuk loop (di mana Anda melakukan sesuatu) datang pada lebih awal daripada di akhir.
Tentang pertanyaan Anda:
Jenis objek apa yang harus digunakan untuk menggunakan struktur loop for ini?
Sebuah iterable . Objek apa pun yang dapat menghasilkan sekumpulan elemen (terbatas). Ini termasuk wadah, daftar, set, generator, dll.
Berapakah urutan i dan j yang ditetapkan ke elemen dalam objek?
Mereka ditugaskan dalam urutan yang persis sama seperti yang dihasilkan dari setiap daftar, seolah-olah mereka berada dalam loop for bersarang (untuk pemahaman pertama Anda, Anda akan mendapatkan 1 elemen untuk i, lalu setiap nilai dari j, elemen ke-2 menjadi i, lalu setiap nilai dari j, dll.)
Bisakah itu disimulasikan oleh struktur loop for yang berbeda?
Ya, sudah ditunjukkan di atas.
Dapatkah perulangan for ini disarangkan dengan struktur perulangan for yang serupa atau berbeda? Dan bagaimana tampilannya?
Tentu, tapi itu bukan ide yang bagus. Di sini, misalnya, memberi Anda daftar daftar karakter:
[[ch for ch in word] for word in ("apple", "banana", "pear", "the", "hello")]