Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修改python中正在迭代的列表_Python_List_Iterator - Fatal编程技术网

修改python中正在迭代的列表

修改python中正在迭代的列表,python,list,iterator,Python,List,Iterator,我需要在迭代列表时更新它。 基本上,我有一个名为some\u list的元组列表,每个元组包含一组字符串,例如名称和路径。我要做的是检查每个元组,查看名称,然后找到包含具有相同路径的字符串的所有元组,并从列表中删除它们 顺序并不重要,我只想浏览整个列表,但是每当我遇到具有特定路径的元组时,所有元组(包括自己)都应该从列表中删除。我可以很容易地构建这样一个列表,并将其分配给更新后的某个列表,但问题似乎是原始列表没有更新 该代码或多或少具有以下结构: for tup in some_list[:]:

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

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

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

for tup in some_list[:]:
    ...
    ...somecode...
    ...
    some_list = some_list_updated
当我打印出列表时,它似乎确实进行了适当的更新,但python似乎一直在对旧列表进行迭代。什么是适当的方式去做它-如果有一个?非常感谢

您希望使用字典对路径进行计数,然后仅使用计数为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]

您正在循环浏览列表的副本,因此您看到的行为完全是意料之中的。您能告诉我们您正在尝试做什么吗?通常一个列表理解(从另一个序列建立一个新的列表)是更好的方法。谢谢你的快速回复!基本上,我有一个元组列表;每个元组包含一组字符串,例如名称和路径。我要做的是检查每个元组,查看名称,然后找到包含具有相同路径的字符串的所有元组,并从列表中删除它们@据我所知,你不应该重复列表本身,因为这可能会导致未指定的行为…你可以通过你的问题来澄清你的问题。你是否试图使你的条目独特?秩序重要吗?或者应该删除所有具有相同路径的项吗?感谢您的帮助-我使用的是python 2.6,无法轻松升级,因此计数器类不包含在发行版中。实际上,我在这里找到了一个几乎相同问题的答案:@MichałCzapliński:有一个可用的后端口,请参阅:-)