簡體   English   中英

關於python3列表刪除的問題。為什么不能刪除帶有奇數的偶數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM