关于python3列表删除的问题。为什么不能删除带有奇数的偶数?

时间:2019-03-07 13:55:02

标签: python list

我输入了一行代码

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]

我崩溃了

5

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翻译的帮助下,我不太懂英语

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

就像@Lennart Regebro在他的answer中提到的那样,由于您每次在列表上进行迭代时都修改列表,因此获取该列表的副本并对其进行迭代比较安全,因为您会意外否则结果:

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]

答案 1 :(得分:0)

您正在遍历列表时修改列表,这意味着在删除每个数字后,循环将避免删除值之后的第一个值,并取第二个下一个值,直到循环结束。

您可以复制列表以进行遍历并从原始列表中删除,如下所示:

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)

答案 2 :(得分:0)

Ahmed Hawary指出了您的错误。您也可以尝试使用此功能,列表理解功能使您可以轻松地基于任何条件修改现有列表。

[如果i%2!= 0,i代表我在li中