Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Mengalih Keluar Elemen daripada Senarai Python Semasa Lelaran Menghasilkan Keputusan yang Tidak Dijangka?

Mengapa Mengalih Keluar Elemen daripada Senarai Python Semasa Lelaran Menghasilkan Keputusan yang Tidak Dijangka?

Patricia Arquette
Patricia Arquetteasal
2024-12-04 18:11:121005semak imbas

Why Does Removing Elements from a Python List During Iteration Produce Unexpected Results?

Mengalih keluar daripada Senarai Sambil Mengulangkannya

Apabila mengulang senarai dan mengalih keluar elemen, tingkah laku Python boleh membingungkan. Coretan kod di bawah:

a = list(range(10))
remove = False
for b in a:
    if remove:
        a.remove(b)
    remove = not remove
print(a)

Output [0, 2, 3, 5, 6, 8, 9], bukannya yang dijangkakan [0, 2, 4, 6, 8].

Memahami Gelagat Penyingkiran Berulang

Ini output terhasil daripada cara Python mengendalikan jujukan boleh ubah semasa lelaran. Apabila alih keluar dipanggil, senarai asas diubah suai. Walau bagaimanapun, iterator tetap sama dan terus merentasi senarai yang diubah suai.

Rajah di bawah menggambarkan proses penyingkiran:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]       <-  b = 0; remove? no
 ^
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]       <-  b = 1; remove? yes
    ^
[0, 2, 3, 4, 5, 6, 7, 8, 9]          <-  b = 3; remove? no
       ^
[0, 2, 3, 4, 5, 6, 7, 8, 9]          <-  b = 4; remove? yes
          ^
[0, 2, 3, 5, 6, 7, 8, 9]             <-  b = 6; remove? no
             ^
[0, 2, 3, 5, 6, 7, 8, 9]             <-  b = 7; remove? yes
                ^
[0, 2, 3, 5, 6, 8, 9]                <-  b = 9; remove? no
                   ^

Menjawab Soalan yang Selebihnya

  1. Petunjuk Ralat: Python tidak membuang ralat kerana ia akan menanggung overhed masa jalan. Ia menganggap bahawa pengaturcara mengetahui akibat mengubah suai senarai semasa lelaran dan mengendalikannya dengan sewajarnya.
  2. Gelagat Sejarah: Tingkah laku ini telah wujud dalam Python sejak versi awal (sekurang-kurangnya 1.4), dan adalah konsisten dengan cara jujukan boleh ubah biasanya dilaksanakan.

Atas ialah kandungan terperinci Mengapa Mengalih Keluar Elemen daripada Senarai Python Semasa Lelaran 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
Artikel sebelumnya:Hari Menguasai Asas PythonArtikel seterusnya:Hari Menguasai Asas Python