我正试着从列表中删除偶数。我的最终输出是4,8,但它应该是空的。
list = [2, 4, 6, 8, 10]
for i in list:
divid = i %2
if divid == 0 :
list.remove(i)
print(list)
发布于 2019-07-23 17:47:17
当你在列表上迭代时,你正在修改它。想象一个指针沿着列表移动。对于第一次迭代,索引为0( i
为2)。删除第一个值并返回到循环的开头。
索引递增(到1),i
现在是列表中的第二个值(现在是6),该值也被删除。请注意,4现在位于迭代器的索引“后面”,并且永远不会到达。继续沿着列表前进,您将每隔一段时间从[4, 8]
中删除一次值。
我有几点建议。要遍历这样的列表,可以使用for i in list[:]:
,它会在迭代之前复制列表。也要避免命名变量,比如list
,这会覆盖内置类型。您将在稍后的代码中导致错误。
发布于 2019-07-23 17:50:46
正如其他人所指出的那样,您不应该在修改列表的同时对其进行迭代。最简单的解决方案是创建一个包含所需修改的新列表:
lst = [2, 4, 6, 8, 10]
new_lst = [i for i in lst if i % 2 != 0]
上面使用列表理解来创建一个只包含奇数元素的新列表-这与从原始列表中删除偶数元素相同。
发布于 2019-07-23 17:55:14
for i in lst:
if i % 2 != 0:
new_lst.append(i)
https://stackoverflow.com/questions/57161182
复制相似问题