Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Mengalih Keluar Item Secara Berulang daripada Senarai Python Menghasilkan Keputusan Yang Tidak Dijangka?

Mengapa Mengalih Keluar Item Secara Berulang daripada Senarai Python Menghasilkan Keputusan Yang Tidak Dijangka?

Patricia Arquette
Lepaskan: 2024-12-23 06:01:13
asal
223 orang telah melayarinya

Why Does Iteratively Removing Items from a Python List Produce Unexpected Results?

Gelagat Pelik Apabila Mengalih Keluar Item Secara Berulang dalam Python

Dalam Python, hasil pelik boleh berlaku apabila memadam item daripada senarai semasa lelaran. Pertimbangkan kod berikut:

numbers = list(range(1, 50))

for i in numbers:
    if i < 20:
        numbers.remove(i)

print(numbers)
Salin selepas log masuk

Output yang dijangkakan: [20, 21, ..., 49]

Output sebenar: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 21, ..., 49]

Sebab:

Masalahnya berpunca daripada mengubah suai senarai sambil mengulanginya. Semasa lelaran gelung pertama, 1 dikeluarkan. Walau bagaimanapun, lelaran seterusnya tidak lagi menunjukkan kepada 2 dalam senarai yang dipendekkan tetapi sebaliknya kepada 3. Ini berterusan sehingga hanya elemen yang lebih besar daripada 20 kekal.

Penyelesaian:

  • Senarai Pemahaman:
numbers = [n for n in numbers if n >= 20]
Salin selepas log masuk
  • Pengubahan Di Tempat:
numbers[:] = (n for n in numbers if n >= 20)
Salin selepas log masuk
  • Sebelumnya Pemprosesan dengan Penjana Ungkapan:
for i, n in enumerate(numbers):
    if n < 20:
        print("do something")
        numbers[i] = None
numbers = [n for n in numbers if n is not None]
Salin selepas log masuk

Adalah penting untuk ambil perhatian bahawa mengubah suai panjang senarai semasa lelaran biasanya tidak disyorkan. Penyelesaian yang disediakan menawarkan pendekatan alternatif untuk mencapai hasil yang diinginkan.

Atas ialah kandungan terperinci Mengapa Mengalih Keluar Item Secara Berulang daripada Senarai Python Menghasilkan Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan