[英]Question about python3 list deletion。Why can't I delete an even number with an odd number?
我輸入了一行代碼
li = [1,2,3,4,5,6,7]
for i in li :
if i%2 == 0:
li.remove(i)
print(li)
[1, 3, 5, 7]
沒關系
二
li = [2,4,5,6,7]
for i in li :
if i%2 == 0:
li.remove(i)
print(li)
[4, 5, 7]
沒關系,但是我不知道為什么
三
li = [2,6,4,5,4,7]
for i in li :
if i%2 == 0:
li.remove(i)
print(li)
[6, 5, 7]
可以,與第二個相同,但是我不知道為什么
四
li = [2,6,4,5,6,7]
for i in li :
if i%2 == 0:
li.remove(i)
print(li)
[5, 6, 7]
我壞了
五
li = [2,6,5,6,6,7]
for i in li :
if i%2 == 0:
li.remove(i)
print(li)[5, 6, 6, 7]
😭😭😭
抱歉,在Google翻譯的幫助下,我不太懂英語
任何幫助,將不勝感激。
正如@Lennart Regebro在他的回答中提到的那樣,由於您每次在列表上進行迭代時都要修改列表,因此獲取該列表的副本並對該副本進行迭代是更安全的,因為否則您將得到意外的結果:
li = [2,6,5,6,6,7]
for i in li[:]: #Notice the [:] notation, it is used to create a copy of a list.
if i%2 == 0:
li.remove(i)
print(li)
結果:
[5, 7]
您在遍歷列表時修改列表,這意味着在刪除每個數字之后,循環將避免刪除值之后的第一個值,並取第二個下一個值,直到循環結束。
您可以復制列表以進行迭代,並從原始列表中刪除,如下所示:
li = [2,6,5,6,6,7]
li_copy = li.copy()
for i in li_copy :
if i%2 == 1:
li.remove(i)
print(li)
艾哈邁德·哈瓦里(Ahmed Hawary)指出了您的錯誤。 您也可以嘗試使用此方法,列表理解功能使您可以輕松地基於任何條件修改現有列表。
[如果i%2!= 0,則表示我在li中為i]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.