Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Mengubah Suai Senarai Semasa Lelaran Menyebabkan Keputusan Tidak Dijangka dalam Python?

Mengapa Mengubah Suai Senarai Semasa Lelaran Menyebabkan Keputusan Tidak Dijangka dalam Python?

DDD
Lepaskan: 2024-12-24 16:14:18
asal
807 orang telah melayarinya

Why Does Modifying a List During Iteration Cause Unexpected Results in Python?

Memahami Bahaya Mengubah Suai Senarai Semasa Lelaran

Merentasi senarai sambil membuat pengubahsuaian padanya mungkin membawa kepada tingkah laku yang tidak dijangka disebabkan oleh ketidakkonsistenan antara keadaan senarai dan pemahaman iterator tentangnya. Untuk menggambarkan perkara ini, pertimbangkan kod Python berikut:

l = range(100)
for i in l:
    print(i)
    print(l.pop(0))
    print(l.pop(0))
Salin selepas log masuk

Daripada output jangkaan nombor berjujukan, kod ini menghasilkan hasil yang pelik. Alasannya terletak pada fakta bahawa sementara iterator berulang melalui senarai l, senarai itu sendiri sedang diubah suai. Secara khususnya, kaedah pop(0) mengalih keluar elemen dari permulaan l.

Untuk mengelakkan ketidakkonsistenan tersebut, adalah penting untuk mengelakkan pengubahsuaian bekas yang diulang. Satu penyelesaian yang biasa ialah membuat salinan bekas dan lelaran melalui salinan. Walau bagaimanapun, dalam kes seperti ini, di mana matlamatnya adalah untuk mengubah suai bekas asal, pendekatan berbeza diperlukan.

Pertimbangkan kod alternatif berikut:

i = 0
while i < len(some_list):
    print(some_list[i])
    print(some_list.pop(0))
    print(some_list.pop(0))
    i += 1
Salin selepas log masuk

Dalam kod ini, kami menggunakan gelung sementara untuk mengawal lelaran secara manual. Daripada lelaran melalui senarai secara langsung, kami menggunakan indeks i untuk mengakses elemen dan kemudian secara manual pop item daripada some_list. Ini memastikan gelung bertindak balas kepada kemas kini some_list.

Atas ialah kandungan terperinci Mengapa Mengubah Suai Senarai Semasa Lelaran Menyebabkan Keputusan Tidak Dijangka dalam Python?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan