首页 > Python > 如何检查列表是否有任何重复项并返回没有重复项的新列表?

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

上一篇 下一篇

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

分割线

网友回答:

在 Python 2.7 中,从可迭代对象中删除重复项并使其保持原始顺序的新方法是:

>>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys('abracadabra'))
['a', 'b', 'r', 'c', 'd']

在Python 3.5中,OrderedDict有一个C实现。我的时间表明,这是现在Python 3.5各种方法中最快和最短的。

在 Python 3.6 中,常规字典变得既有序又紧凑。(此功能适用于CPython和PyPy,但可能不会出现在其他实现中)。这为我们提供了一种新的最快去重方法,同时保持秩序:

>>> list(dict.fromkeys('abracadabra'))
['a', 'b', 'r', 'c', 'd']

在 Python 3.7 中,常规字典保证在所有实现中都排序。因此,最短和最快的解决方案是:

>>> list(dict.fromkeys('abracadabra'))
['a', 'b', 'r', 'c', 'd']

分割线

网友回答:

获取唯一项目集合的常用方法是使用 .集合是不同对象的无序集合。要从任何可迭代对象创建集合,只需将其传递给内置函数即可。如果你以后再次需要一个真正的列表,你可以类似地将集合传递给函数。setset()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]

从 Python 3.7 开始,内置词典也保证保持广告顺序,因此如果您使用的是 Python 3.7 或更高版本(或 CPython 3.6),您也可以直接使用它:

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

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


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

分割线

网友回答:

这是一句话:会解决问题。list(set(source_list))

A 是不可能有重复项的东西。set

更新:订单保留方法是两行:

from collections import OrderedDict
OrderedDict((x, True) for x in source_list).keys()

在这里,我们使用记住键的插入顺序的事实,并且在更新特定键的值时不会更改它。我们作为值插入,但我们可以插入任何东西,只是不使用值。( 的工作方式也很像 忽略值的 。OrderedDictTruesetdict

模板简介:该模板名称为【如何检查列表是否有任何重复项并返回没有重复项的新列表?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Python】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 191次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 03-07
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
企业网站 微信模板 微信公众平台 html5 微信素材 微信文章 自适应 单页式简历模板 微信图片 响应式
您可能会喜欢的其他模板