Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Mengalih Keluar Elemen Senarai Semasa Lelaran dalam Python Membawa kepada Keputusan yang Tidak Dijangka?

Mengapa Mengalih Keluar Elemen Senarai Semasa Lelaran dalam Python Membawa kepada Keputusan yang Tidak Dijangka?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-25 07:07:09551semak imbas

Why Does Removing List Elements During Iteration in Python Lead to Unexpected Results?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn