Contoh komprehensif iterator dan penjana
Oleh kerana iterator dan penjana pada asasnya boleh dikendalikan, beberapa titik pengetahuan perlu disepadukan bersama
1 Lelaran terbalik
Lelaran terbalik juga harus menjadi keperluan biasa, seperti contoh lelaran dari awal Di sini, terdapat satu. elemen senarai keluaran,
list1 = [1,2,3,4,5] for num1 in list1 : print ( num1 , end = ' ' )
dari 1 hingga 5. Jadi apa yang kita lakukan dari 5 hingga 1? Ini juga sangat mudah. Terdapat fungsi terbina dalam terbalik() dalam Python
list1 = [1,2,3,4,5] for num1 in reversed(list1) : print ( num1 , end = ' ' )
Lelaran arah adalah sangat mudah, tetapi satu perkara yang perlu diperhatikan ialah lelaran terbalik hanya berlaku apabila saiz objek boleh ditentukan terlebih dahulu atau objek melaksanakan kaedah khas __reversed__() untuk berkuat kuasa. Jika kedua-duanya tidak dipenuhi, anda mesti menukar objek kepada senarai terlebih dahulu, sebenarnya, banyak kali kita boleh melaksanakan lelaran terbalik dengan melaksanakan kaedah __reversed__() pada kelas tersuai. Walau bagaimanapun, beberapa mata pengetahuan tidak disebutkan dalam bab sebelumnya, tetapi anda boleh membacanya dengan sewajarnya Mereka yang mempunyai asas pengaturcaraan harus dapat memahaminya selepas mempelajari mata pengetahuan di atas.
# -*- coding: UTF-8 -*- class Countdown: def __init__(self, start): self.start = start def __iter__(self): # Forward iterator n = self.start while n > 0: yield n n -= 1 def __reversed__(self): # Reverse iterator n = 1 while n <= self.start: yield n n += 1 for rr in reversed(Countdown(30)): print(rr) for rr in Countdown(30): print(rr)
Hasil keluaran ialah 1 hingga 30 dan kemudian 30 hingga 1, iaitu pencetakan berurutan dan pencetakan terbalik masing-masing
2 Lelaran berbilang jujukan pada masa yang samaAnda mahu mengulang berbilang jujukan pada masa yang sama, setiap kali daripada satu urutan Ambil elemen. Pernahkah anda menghadapi keperluan sedemikian?
Untuk mengulang berbilang jujukan pada masa yang sama, gunakan fungsi zip() Contoh khusus:
# -*- coding: UTF-8 -*- names = ['laingdianshui', 'twowater', '两点水'] ages = [18, 19, 20] for name, age in zip(names, ages): print(name,age)
Hasil keluaran:
laingdianshui 18 twowater 19 两点水 20
Malah, zip(a, b) akan menjana lelaran yang mengembalikan tuple (. x, y) , di mana x berasal dari a dan y berasal dari b. Sebaik sahaja salah satu jujukan mencapai penghujung, lelaran tamat. Oleh itu, panjang lelaran adalah konsisten dengan panjang jujukan terpendek dalam parameter. Beri perhatian untuk memahami ayat ini, iaitu, jika panjang a dan b tidak konsisten, yang terpendek akan digunakan sebagai piawai, dan traversal akan berakhir.
Menggunakan fungsi zip(), kita juga boleh menjana dict (kamus) daripada senarai kunci dan senarai nilai, seperti berikut:
# -*- coding: UTF-8 -*- names = ['laingdianshui', 'twowater', '两点水'] ages = [18, 19, 20] dict1= dict(zip(names,ages)) print(dict1)
Keluarkan hasil berikut:
{'laingdianshui': 18, 'twowater': 19, '两点水': 20}
Biar saya nyatakan di sini bahawa zip() boleh menerima lebih daripada Dua parameter jujukan, bukan hanya dua.