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")]
Anda mungkin tertarik
itertools.product
, yang mengembalikan tupel nilai yang dapat diulang dari semua iterable yang Anda lewati. Artinya,itertools.product(A, B)
menghasilkan semua nilai bentuk(a, b)
, dari manaa
nilai - nilai itu berasalA
danb
nilai - nilai itu berasalB
. Sebagai contoh:Ini mencetak:
Perhatikan bagaimana argumen terakhir yang diberikan
itertools.product
adalah yang "di dalam". Umumnya sama denganitertools.product(a0, a1, ... an)
[(i0, i1, ... in) for in in an for in-1 in an-1 ... for i0 in a0]
sumber
Pertama-tama, kode pertama Anda tidak menggunakan perulangan for, tetapi pemahaman daftar .
Akan setara dengan
untuk j dalam rentang (0, lebar): untuk i dalam rentang (0, tinggi): m [i] [j]
Dengan cara yang hampir sama, umumnya sarang seperti untuk loop, dari kanan ke kiri. Tetapi sintaks pemahaman daftar lebih kompleks.
Saya tidak yakin apa pertanyaan ini
Objek iterable apa pun yang menghasilkan objek iterable yang menghasilkan tepat dua objek (seteguk - artinya
[(1,2),'ab']
valid)Urutan di mana objek menghasilkan setelah iterasi.
i
pergi ke hasil pertama,j
kedua.Ya, tapi tidak secantik itu. Saya yakin ini secara fungsional setara dengan:
atau bahkan lebih baik menggunakan peta :
Tapi tentu saja fungsi harus mendapatkan
i
,j
itu sendiri.Bukankah ini pertanyaan yang sama dengan 3?
sumber
Anda dapat menggunakan dua for loop di baris yang sama dengan menggunakan
zip
functionKode:
Keluaran:
['Abbas', 'Kamran', 'Ali', 'Asgar', 'Usman', 'Hamza']
Jadi, dengan menggunakan fungsi zip, kita bisa menggunakan dua for loop atau kita bisa mengulang dua list di baris yang sama.
sumber
Kode di bawah ini untuk contoh terbaik untuk loop bersarang, sementara menggunakan dua untuk loop, harap diingat bahwa output dari loop pertama adalah input untuk loop kedua. Penghentian loop juga penting saat menggunakan loop bersarang
sumber