修改在python中迭代的列表

时间:2013-08-15 14:01:39

标签: python list iterator

我需要在迭代过程中更新列表。 基本上,我有一个名为some_list的元组列表。每个元组都包含一串字符串,例如名称和路径。我想要做的是遍历每个元组,查看名称,然后找到包含具有相同路径的字符串的所有元组,并从列表中删除它们。

顺序无关紧要,我只想查看整个列表,但每当遇到具有特定路径的元组时,应从列表中删除所有元组(包括自己)。我可以很容易地构建这样一个列表并将其分配给some_list_updated,但问题似乎是原始列表没有更新......

代码或多或少具有以下结构:

for tup in some_list[:]:
    ...
    ...somecode...
    ...
    some_list = some_list_updated

当我打印出来时,列表似乎确实更新了,但似乎python继续迭代旧列表。什么是适当的方式 - 如果有的话?非常感谢!

1 个答案:

答案 0 :(得分:1)

您希望使用字典计算路径,然后仅使用计数为1的路径,然后使用列表推导进行循环以执行最终过滤。使用collections.Counter()对象可以简化计数部分:

from collections import Counter

counts = Counter(tup[index_of_path] for tup in some_list)

some_list = [tup for tup in some_list if counts[tup[index_of_path]] == 1]