Saya perlu mengulang daftar melingkar, mungkin berkali-kali, setiap kali dimulai dengan item yang terakhir dikunjungi.
Kasus penggunaan adalah kumpulan koneksi. Klien meminta koneksi, iterator memeriksa apakah koneksi menunjuk-ke tersedia dan mengembalikannya, jika tidak mengulang sampai menemukan koneksi yang tersedia.
Apakah ada cara yang rapi untuk melakukannya dengan Python?
pool.next()
untuk mendapatkan satu item berikutnya dari siklusnext(iterator)
(yang BTW juga berfungsi dengan baik pada Python 2.x, dan karena itu adalah bentuk kanonik yang harus digunakan). Lihat Apakah generator.next () terlihat di python 3.0? untuk penjelasan yang lebih mendalam. Memperbarui jawaban saya.Jawaban yang benar adalah dengan menggunakan itertools.cycle . Tapi, mari kita asumsikan bahwa fungsi perpustakaan tidak ada. Bagaimana Anda akan menerapkannya?
Gunakan generator :
Kemudian, Anda dapat menggunakan
for
pernyataan untuk mengulang tanpa batas, atau Anda dapat memanggilnext()
untuk mendapatkan satu nilai berikutnya dari iterator generator:sumber
while True
cara untuk mengulang selamanyaitertools.cycle
adalah jawaban yang lebih baik. Ini menunjukkan bagaimana Anda dapat menulis fungsi yang sama jikaitertools
tidak tersedia :)itertools.cycle
dilakukan? Atau generator sederhana akan menjadi desain yang lebih hemat memori? Percycle
docs :Note, this member of the toolkit may require significant auxiliary storage (depending on the length of the iterable).
cycle
menyiratkan bahwa input yang dapat diulang diubah menjadilist
sebelum generatornya dimulai, karenaiterable
hanya "baik untuk satu lintasan di atas kumpulan nilai".Atau Anda bisa melakukan seperti ini:
mencetak abcdefab c ... selamanya
sumber
Anda dapat melakukannya dengan
append(pop())
loop:atau
for i in range()
loop:atau sederhana:
semuanya mencetak:
dari ketiganya, saya akan cenderung menggunakan pendekatan append (pop ()) sebagai fungsi
sumber
Anda memerlukan iterator khusus - Saya akan menyesuaikan iterator dari jawaban ini .
sumber
Jika Anda ingin
n
mengubah waktu, terapkanncycles
resep itertools :sumber