Jadual Kandungan
Jawapan Betul
Rumah pembangunan bahagian belakang Tutorial Python Keputusan yang pelik apabila mengalih keluar item daripada senarai sambil melelakan senarai dalam Python

Keputusan yang pelik apabila mengalih keluar item daripada senarai sambil melelakan senarai dalam Python

Feb 09, 2024 am 10:10 AM
penukaran tersirat

在 Python 中迭代列表时从列表中删除项目时出现奇怪的结果

Kandungan soalan

Saya ada kod ini:

numbers = list(range(1, 50))

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

print(numbers)
Salin selepas log masuk

Namun, hasil yang saya dapat 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]

Sudah tentu, saya berharap tidak akan ada nombor di bawah 20 dalam keputusan. Nampaknya saya melakukan sesuatu yang salah semasa memadam.


Jawapan Betul


Anda sedang mengubah suai senarai sambil mengulanginya. Ini bermakna kali pertama melalui gelung, nilai i == 1,因此1被从列表中删除。然后for循环转到列表中的第二项,它不是2,而是3!然后将其从列表中删除,然后 for 循环继续执行列表中的第三项,现在是 5。依此类推。也许这样更容易可视化,用 ^ 指向 i ialah:

[1, 2, 3, 4, 5, 6...]
 ^
Salin selepas log masuk

Ini ialah keadaan awal senarai; kemudian 1 dialih keluar dan gelung pergi ke item kedua dalam senarai:

[2, 3, 4, 5, 6...]
    ^
[2, 4, 5, 6...]
       ^
Salin selepas log masuk

Tunggu.

Tiada cara yang baik untuk menukar panjang senarai sambil mengulanginya. Perkara terbaik yang boleh anda lakukan ialah ini:

numbers = [n for n in numbers if n >= 20]
Salin selepas log masuk

Atau ini, untuk perubahan di tempat (perkara dalam kurungan ialah ungkapan penjana yang secara tersirat ditukar kepada tupel sebelum penetapan hirisan):

numbers[:] = (n for n in numbers if n >= 20)
Salin selepas log masuk

Jika anda ingin mengambil tindakan n sebelum memadamkannya, satu helah yang boleh anda cuba ialah:

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

Atas ialah kandungan terperinci Keputusan yang pelik apabila mengalih keluar item daripada senarai sambil melelakan senarai dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menggunakan pendek dalam java Bagaimana untuk menggunakan pendek dalam java May 07, 2024 am 03:33 AM

short ialah jenis data primitif dalam Java yang mewakili integer bertanda 16-bit dalam julat -32,768 hingga 32,767. Ia sering digunakan untuk mewakili integer kecil, seperti pembilang atau ID, dan menyokong operasi aritmetik asas dan penukaran jenis. Tetapi kerana pendek ialah jenis yang ditandatangani, anda perlu berhati-hati apabila menggunakan pembahagian untuk mengelakkan limpahan atau aliran bawah.

Penggunaan ifnull dalam sql Penggunaan ifnull dalam sql Apr 28, 2024 am 09:57 AM

Fungsi IFNULL menyemak sama ada ungkapan adalah NULL dan mengembalikan nilai lalai yang ditentukan jika ya, jika tidak, ia mengembalikan nilai ungkapan. Ia menghalang nilai nol daripada menyebabkan ralat, membenarkan manipulasi nilai nol, dan meningkatkan kebolehbacaan pertanyaan. Penggunaan termasuk: menggantikan nilai nol dengan nilai lalai, tidak termasuk nilai nol daripada pengiraan, dan penggunaan bersarang untuk mengendalikan berbilang situasi nilai nol.

Bagaimana untuk mengira pembahagian dalam bahasa c Bagaimana untuk mengira pembahagian dalam bahasa c Apr 13, 2024 pm 09:12 PM

Dalam bahasa C, tingkah laku operator bahagian / bergantung pada jenis data operan: Pembahagian integer: Apabila operan ialah integer, pembahagian integer dilakukan dan hasilnya dibundarkan ke bawah. Pembahagian titik terapung: Apabila operan ialah nombor titik terapung, pembahagian titik terapung dilakukan dan hasilnya ialah nombor titik terapung. Penukaran jenis: Apabila satu operan ialah integer dan satu lagi tidak, integer secara tersirat ditukar kepada nombor titik terapung, dan kemudian pembahagian titik terapung dilakukan. Pembahagi dengan 0: Ralat matematik berlaku apabila pembahagi ialah 0. Operasi modulo: Gunakan operator % untuk operasi modulo dan bukannya pembahagian modulo.

Apakah maksud char dalam java? Apakah maksud char dalam java? May 01, 2024 pm 06:15 PM

Jenis char dalam Java digunakan untuk menyimpan satu aksara Unicode, merangkumi 2 bait, antara U+0000 hingga U+FFFF Ia digunakan terutamanya untuk menyimpan aksara teks Ia boleh dimulakan melalui petikan tunggal atau urutan melarikan diri Unicode. dan boleh mengambil bahagian dalam perbandingan, Kesamaan, ketidaksamaan dan operasi bergabung boleh ditukar secara tersirat kepada jenis int atau ditukar secara eksplisit kepada objek Aksara.

Apakah peraturan padanan untuk kelebihan beban fungsi C++? Apakah peraturan padanan untuk kelebihan beban fungsi C++? Apr 27, 2024 am 08:27 AM

Peraturan pemadanan lampau fungsi C++ adalah seperti berikut: padankan nombor dan jenis parameter dalam panggilan. Susunan parameter mestilah konsisten. Constness dan pengubah rujukan mesti sepadan. Parameter lalai boleh digunakan.

Apakah maksud * dalam mysql Apakah maksud * dalam mysql Apr 26, 2024 am 07:21 AM

Asterisk (*) dalam MySQL bermaksud "semua" dan mempunyai kegunaan yang berbeza: Pilih semua lajur Pilih semua baris JOIN kad bebas untuk jadual LIKE klausa Pengkuantiti untuk klausa REGEXP Penukaran jenis tersirat

Penggunaan (+ dalam oracle Penggunaan (+ dalam oracle May 08, 2024 pm 08:12 PM

Operator tambah (+) dalam Oracle boleh digunakan untuk: menggabungkan rentetan, nombor, tarikh, dan selang masa mengendalikan nilai NULL dan menukar nilai NULL kepada bukan NULL;

Apakah jenis parameter fungsi PHP? Apakah jenis parameter fungsi PHP? Apr 10, 2024 pm 04:21 PM

Jenis parameter fungsi PHP termasuk jenis skalar (integer, nombor titik terapung, rentetan, nilai Boolean, nilai nol), jenis komposit (tatasusunan, objek) dan jenis khas (fungsi panggil balik, parameter berubah). Fungsi boleh menukar parameter jenis yang berbeza secara automatik, tetapi ia juga boleh memaksa jenis tertentu melalui pengisytiharan jenis untuk mengelakkan penukaran tidak sengaja dan memastikan ketepatan parameter.

See all articles