下面這題你知道答案了嗎?
假設現在我們定義一個列表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)
除了遍歷列表,在循環遍歷其他類型數據的時候也要注意避免采這種坑,今天的分享就到這了,覺得小編寫的對你有幫助的話,可以點個贊喲。