Dalam Python, mengubah suai senarai sambil mengulanginya boleh membawa kepada hasil yang tidak dijangka. Pertimbangkan kod berikut:
numbers = list(range(1, 50)) for i in numbers: if i < 20: numbers.remove(i) print(numbers)
Daripada mengalih keluar nombor di bawah 20, seperti yang dimaksudkan, kod ini mencetak senarai di mana semua nombor di bawah 20 hilang, bersama-sama dengan 20 itu sendiri.
Isu ini berpunca daripada fakta bahawa mengalih keluar item daripada senarai mengubah kedudukan item seterusnya. Semasa gelung berlangsung, item yang diperiksa bukan lagi yang dijangka, kerana elemen yang dialih keluar mencipta "lubang" dalam senarai.
Sebagai contoh, semasa lelaran awal, 1 dialih keluar, tetapi lelaran seterusnya tidak menyemak 2; sebaliknya, ia menyemak 3 kerana senarai telah dipendekkan. Tingkah laku ini berterusan, mengakibatkan output yang salah.
Untuk mengelakkan masalah ini, gunakan kaedah alternatif untuk mengubah senarai semasa lelaran, seperti:
numbers = [n for n in numbers if n >= 20]
numbers[:] = (n for n in numbers if n >= 20)
for i, n in enumerate(numbers): if n < 20: numbers[i] = None numbers = [n for n in numbers if n is not None]
Ini teknik tidak mengubah suai panjang senarai semasa berulang, memastikan pemprosesan item yang betul dan output yang diingini.
Atas ialah kandungan terperinci Mengapa Mengubah Suai Senarai Python Semasa Lelaran Membawa kepada Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!