迭代可能会跳过一个元素

时间:2013-07-12 14:35:07

标签: python python-3.x iteration

我正在迭代Python中的元组列表,在我看来,中间元素正在以某种方式被跳过。这是我的代码块,目标是删除任何以None作为第二个元素的元组:

print('List of tuples before modification: ' +str(list_of_tuples))
for refseq_tuple in list_of_tuples:
    print('tuple: ' +str(refseq_tuple))
    if refseq_tuple[1] == None:
        list_of_tuples.remove(refseq_tuple)
print('List of tuples after modification: ' +str(list_of_tuples))

这是输出:

List of tuples before modification: [('100652761', None), ('100653343', None), ('3183', 0)]
tuple: ('100652761', None)
tuple: ('3183', 0)
List of tuples after modification: [('100653343', None), ('3183', 0)]

那么...中间(第二)元素发生了什么?它看起来好像根本没有被迭代,或者它会在其他两个元组之间打印。

2 个答案:

答案 0 :(得分:1)

您已更改原始列表。所以这次索引1引用('3183', 0)

>>> alist = [('100652761', None), ('100653343', None), ('3183', 0)]
>>> [x for x in alist if not x[1] is None]
[('3183', 0)]
>>> 

答案 1 :(得分:1)

正如其他人所指出的那样,你在迭代它时修改列表。但是,你可以通过列表理解来完成你在这里所做的事情(除非出于某种原因你真的需要在适当的位置进行修改)。

list_of_tuples = [tup for tup in list_of_tuples if tup[1] is not None]