Bagaimana untuk iterate melalui dua daftar di paralel?
Saya memiliki dua iterables di Python, dan aku ingin pergi atas mereka di pasang:
foo = (1, 2, 3)
bar = (4, 5, 6)
for (f, b) in some_iterator(foo, bar):
print "f: ", f, "; b: ", b
Ini harus menghasilkan:
f: 1; b: 4
f: 2; b: 5
f: 3; b: 6
Satu cara untuk melakukannya adalah untuk iterate atas indeks:
for i in xrange(len(foo)):
print "f: ", foo[i], "; b: ", b[i]
Tapi itu tampaknya agak unpythonic untuk saya. Apakah ada cara yang lebih baik untuk melakukannya?
758
5
Python 3
zip
berhenti ketika lebih pendek darifoo
ataubar
berhenti.Di Python 3,
zip
mengembalikan sebuah iterator tupel, sepertiitertools.izip
di Python2. Untuk mendapatkan daftar tupel, gunakandaftar(zip(foo, bar))
. Dan untuk pos sampai kedua iterator adalah habis, anda akan menggunakan itertools.zip_longest.Python 2
Di Python 2,
zip
mengembalikan daftar tupel. Ini adalah baik-baik saja ketikafoo
danbar
yang tidak besar. Jika mereka investasi besar-besaran yang kemudian membentukzip(foo,bar)
adalah tidak perlu besar-besaran sementara variabel, dan harus diganti denganitertools.izip
atauitertools.izip_longest
, yang mengembalikan sebuah iterator bukan daftar.izip
berhenti ketika salah satufoo
ataubar
habis.izip_longest
berhenti ketika keduafoo
danbar
habis. Ketika lebih pendek iterator(s) telah habis,izip_longest
menghasilkan tupel denganTidak ada
di posisi yang sesuai dengan yang iterator. Anda juga dapat mengatur berbedafillvalue
selain ituTidak
jika anda ingin. Lihat disini untuk cerita.Perhatikan juga bahwa
zip
danzip
-seperti brethen dapat menerima jumlah sewenang-wenang iterables sebagai argumen. Misalnya,cetakan
Anda ingin
zip
fungsi.Anda harus menggunakan 'zip' fungsi. Berikut adalah contoh bagaimana anda sendiri zip fungsi dapat terlihat seperti
dengan python versi.
Berikut ini's bagaimana untuk melakukannya dengan daftar pemahaman:
cetakan: