Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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 - Fatal编程技术网

Python 删除列表或字典中的重复项

Python 删除列表或字典中的重复项,python,Python,我正在将项目添加到列表中,不需要副本 empty_list = [] empty_list.append('some_item') 我想检查列表中是否已经存在该项目的精确副本。如果是这样的话,我希望该项目不附加 我认为应该编写一个if语句来检查列表中是否已经存在该项。如果是,请不要附加 if 'some_item' not in empty_list: empty_list.append('some_item') else: pass 是否有一个Python方法/函数可以做到

我正在将项目添加到列表中,不需要副本

empty_list = []
empty_list.append('some_item')
我想检查列表中是否已经存在该项目的精确副本。如果是这样的话,我希望该项目不附加

我认为应该编写一个if语句来检查列表中是否已经存在该项。如果是,请不要附加

if 'some_item' not in empty_list:
    empty_list.append('some_item')
else:
    pass
是否有一个Python方法/函数可以做到这一点


编辑:这是一个重复的问题,它出现了。然而,下面提供的答案似乎比上一个问题好

要有效地执行此操作,请使用集合:

seen = set()
L = []
if 'some_item' not in seen:
    L.append('some_item')
    seen.add('some_item')

要有效地执行此操作,请使用一套:

seen = set()
L = []
if 'some_item' not in seen:
    L.append('some_item')
    seen.add('some_item')

直接的答案是使用一个集合,它会自动忽略重复项

my_set = set()
...
# iterate over your collection of 'some_item's, adding each one
    my_set.add(some_item)

# Finally, if you need the items in a list, rather than a set:
my_list = list(my_set)

直接的答案是使用一个集合,它会自动忽略重复项

my_set = set()
...
# iterate over your collection of 'some_item's, adding each one
    my_set.add(some_item)

# Finally, if you need the items in a list, rather than a set:
my_list = list(my_set)

如果您必须检查是否使用“某些项目”不在我的列表中,则每次都会对整个列表进行搜索。如果项目不一定是可散列的,那么这可能仍然是最适合的方式

你可以像另一个答案所建议的那样使用一个集合,但是这样并排维护两个集合有点烦人

有些人将用作数据结构,其行为类似于没有重复项的列表,您只需使用空值。使用此方法,您不必检查项目是否在其中,您可以简单地分配它,并且不会得到任何重复项

dict本身的行为将与迭代和成员资格测试的列表相同,如果您需要实际的列表,则始终可以使用listodict创建一个列表


如果您必须检查是否使用“某些项目”不在我的列表中,则每次都会对整个列表进行搜索。如果项目不一定是可散列的,那么这可能仍然是最适合的方式

你可以像另一个答案所建议的那样使用一个集合,但是这样并排维护两个集合有点烦人

有些人将用作数据结构,其行为类似于没有重复项的列表,您只需使用空值。使用此方法,您不必检查项目是否在其中,您可以简单地分配它,并且不会得到任何重复项

dict本身的行为将与迭代和成员资格测试的列表相同,如果您需要实际的列表,则始终可以使用listodict创建一个列表



我想知道为什么您已经编写的代码不能满足您的需要?您可以编写自己的函数,这将足够有效。列表的顺序重要吗?这些项目可以散列吗?如果这些问题的答案是“否”和“是”,那么你应该考虑使用一个集合而不是一个列表。您将免费获得重复数据消除。这闻起来是重复的。另外:pass是冗余的。您建议的代码存在问题-使用not in检查项目是否在列表中-它要求必须为每个附加项目检查整个列表。对于短列表,这可能很好,但是如果您想,比如说,将10000个项目附加到一个空列表中,则需要1+2+…+10000次比较。这就是50000000次比较操作!通常,在空列表中插入N项需要N^2/2比较。我想知道为什么您已经编写的代码不能满足您的需要?您可以编写自己的函数,这将足够有效。列表的顺序重要吗?这些项目可以散列吗?如果这些问题的答案是“否”和“是”,那么你应该考虑使用一个集合而不是一个列表。您将免费获得重复数据消除。这闻起来是重复的。另外:pass是冗余的。您建议的代码存在问题-使用not in检查项目是否在列表中-它要求必须为每个附加项目检查整个列表。对于短列表,这可能很好,但是如果您想,比如说,将10000个项目附加到一个空列表中,则需要1+2+…+10000次比较。这就是50000000次比较操作!一般来说,向空列表中插入N个项目需要N^2/2个比较。只要这些项目可以散列,就可以进行比较。根据具体情况,可能根本不需要列表。@LevLevitsky为了保持顺序,我更喜欢列表谢谢!我认为这是一个好主意,尽管@mgilson是正确的。这就是为什么我认为这个问题不是重复的原因,因为我使用的是一个独特的解决方案。只要项目可以散列,它就可以工作。根据情况,可能根本不需要列表。@LevLevitsky为了保持顺序,我更喜欢列表谢谢!我认为这是一个好主意,尽管@mgilson是正确的。这个答案就是为什么我认为这个问题不是重复的,因为这是我正在使用的一个独特的解决方案。但是这破坏了顺序。但是这破坏了顺序。