Python中使用for循環遍歷操作時容易踩的坑


下面這題你知道答案了嗎?

假設現在我們定義一個列表a,內容如下:

a = [1,2,3,4,5,6,7,8,9,10]

學習過python基礎的都知道,針對列表的操作,python提供了一些內置的函數,比如append、count、extend、pop、insert、remove、reverse等函數,那接下來大家先來一起看一段代碼,大家覺得執行后的輸出結果是啥呢?

a = [1,2,3,4,5,6,7,8,9,10]
for i in a:
    a.remove(i)
print(a)

remove是移除列表元素的方法,那么這段腳本執行后的最終結果是什么呢?

你的答案是否正確呢?

思考了片刻之后,那你是不是覺得,最后輸出的是一個空的列表呢?

很顯然,最終輸出的答案肯定不是一個空的列表,最終輸出的結果是:

[2, 4, 6, 8, 10]

是的,你沒有看錯,最后輸出的是:[2, 4, 6, 8, 10]。

那為什么輸出的空列表呢?因為在使用for i in a 這樣的操作的時候,沒遍歷一次后,刪除a列表中的一個元素后,a列表的值已經發生了變化。

代碼運行的過程如下:

第一次循環,刪除下標為0的元素后,此時,列表a變為了[2, 3, 4, 5, 6, 7, 8, 9, 10]

第二次循環,刪除下表為1的元素,此時列表a中剔除的是元素3,列表a變為了[2, 4, 5, 6, 7, 8, 9, 10],

以此類推,最后執行代碼的輸出結果是:[2, 4, 6, 8, 10]

怎么解決上述問題呢?

1、將列表a進行copy一份后進行循環遍歷刪除

for i in a.copy():
    a.remove(i)
print(a)

或者

for i in a[:]:
    a.remove(i)
print(a)

2、將列表倒序后再遍歷刪除

for i in a[::-1]:
    a.remove(i)
print(a)

除了遍歷列表,在循環遍歷其他類型數據的時候也要注意避免采這種坑,今天的分享就到這了,覺得小編寫的對你有幫助的話,可以點個贊喲。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM