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
Patricia Arquetteasal
2024-12-23 06:01:13220semak imbas

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)

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]
  • Pengubahan Di Tempat:
numbers[:] = (n for n in numbers if n >= 20)
  • 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]

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!

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