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:
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: 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!