Gelagat Tidak Dijangka: Mengalih keluar Elemen daripada Senarai Semasa Lelaran
Apabila cuba mengulangi senarai dan mengalih keluar elemen tertentu yang memenuhi kriteria tertentu, tingkah laku yang tidak dijangka mungkin berlaku jika senarai diubah suai semasa proses lelaran. Pertimbangkan kod Python berikut:
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
Anehnya, keputusan yang diperoleh ialah:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
Kami menjangkakan nombor di bawah 20 akan dialih keluar, tetapi ia kekal dalam keputusan. Ini kerana senarai itu diubah suai semasa ia diulang. Apabila elemen pertama, 1, dialih keluar, kedudukan elemen seterusnya beralih dan gelung diteruskan ke elemen seterusnya dalam senarai yang diubah suai, yang bukan yang dijangkakan.
Untuk menyelesaikan isu ini dan dengan tepat lelaran ke atas senarai, kita boleh menggunakan pemahaman senarai atau perubahan di tempat. Pemahaman senarai membolehkan kami membuat senarai baharu dengan hanya elemen yang memenuhi syarat yang ditetapkan:
numbers = [n for n in numbers if n >= 20]
Sebagai alternatif, pengubahan di tempat boleh dilakukan menggunakan penetapan keping:
numbers[:] = (n for n in numbers if n >= 20)
Dengan mengubah suai senarai dengan cara ini, lelaran tidak terjejas dan hasil yang diingini boleh dicapai.
Atas ialah kandungan terperinci Mengapa Mengalih Keluar Elemen Senarai Semasa Lelaran dalam Python Membawa kepada Keputusan yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!