gpt4 book ai didi

python - 删除列表中的重复项

转载 作者:太空宇宙 更新时间:2023-11-03 21:28:28 28 4
gpt4 key购买 nike

如何检查列表是否有重复项并返回没有重复项的新列表?

最佳答案

获取唯一项目集合的常见方法是使用 set 。集合是无序不同对象的集合。要从任何可迭代对象创建集合,您只需将其传递给内置 set()功能。如果您稍后再次需要一个真实的列表,您可以类似地将集合传递给 list()功能。

以下示例应涵盖您尝试执行的任何操作:

>>> t = [1, 2, 3, 1, 2, 3, 5, 6, 7, 8]
>>> list(set(t))
[1, 2, 3, 5, 6, 7, 8]
>>> s = [1, 2, 3]
>>> list(set(t) - set(s))
[8, 5, 6, 7]

从示例结果中可以看出,原始顺序没有保持。如上所述,集合本身是无序集合,因此顺序会丢失。将集合转换回列表时,会创建任意顺序。

维持秩序

如果顺序对您很重要,那么您将不得不使用不同的机制。一个非常常见的解决方案是依赖 OrderedDict在插入过程中保持键的顺序:

>>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys(t))
[1, 2, 3, 5, 6, 7, 8]

Starting with Python 3.7 ,内置字典也保证保持插入顺序,因此如果您使用的是 Python 3.7 或更高版本(或 CPython 3.6),也可以直接使用它:

>>> list(dict.fromkeys(t))
[1, 2, 3, 5, 6, 7, 8]

请注意,这可能会产生一些开销,首先创建字典,然后从中创建列表。如果您实际上不需要保留顺序,那么通常最好使用集合,特别是因为它为您提供了更多的操作可供使用。查看this question了解更多详细信息以及删除重复项时保留顺序的替代方法。

<小时/>

最后请注意,set 以及 OrderedDict/dict 解决方案都要求您的项目可哈希。这通常意味着它们必须是不可变的。如果您必须处理不可散列的项目(例如列表对象),那么您将不得不使用一种缓慢的方法,在这种方法中您基本上必须将每个项目与嵌套循环中的每个其他项目进行比较。

关于python - 删除列表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53693903/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com