python - 在 python 列表中抓取唯一的元组,不管顺序如何

标签 python list numpy duplicates

我有一个 python 列表:

[ (2,2),(2,3),(1,4),(2,2), etc...]

我需要的是某种将其简化为其独特组件的功能......在上面的列表中:

[ (2,2),(2,3),(1,4) ]

numpy unique 并不能完全做到这一点。我可以想办法做到这一点——将我的元组转换为数字,[22,23,14,etc.],找到唯一性,然后从那里开始工作……但我不知道不知道复杂性是否会失控。有没有一个函数可以完成我想用元组做的事情?


这是演示问题的代码示例:

 import numpy as np

 x = [(2,2),(2,2),(2,3)]
 y = np.unique(x)

returns: y: [2 3]

下面是演示修复的解决方案的实现:

 x = [(2,2),(2,2),(2,3)]
 y = list(set(x))

returns y: [(2,2),(2,3)]

最佳答案

如果顺序无关紧要

如果结果的顺序不重要,您可以将列表转换为集合(因为元组是可散列的)并将集合转换回列表:

>>> l = [(2,2),(2,3),(1,4),(2,2)]
>>> list(set(l))
[(2, 3), (1, 4), (2, 2)]

如果顺序很重要

(更新)

从 CPython 3.6(或任何 Python 3.7 版本)开始,常规词典会记住它们的插入顺序,因此您可以简单地发布。

>>> l = [(2,2),(2,3),(1,4),(2,2)]
>>> list(dict.fromkeys(l))
[(2, 2), (2, 3), (1, 4)]

(旧答案)

如果顺序很重要,则过滤重复项的规范方法是这样的:

>>> seen = set()
>>> result = []
>>> for item in l:
...     if item not in seen:
...         seen.add(item)
...         result.append(item)
... 
>>> result
[(2, 2), (2, 3), (1, 4)]

最后,您可以将 OrderedDict 用作有序集,稍微慢一点,也更 hackish一些:

>>> from collections import OrderedDict
>>> OrderedDict.fromkeys(l).keys() # or list(OrderedDict.fromkeys(l)) if using a version where keys() does not return a list
[(2, 2), (2, 3), (1, 4)]

关于python - 在 python 列表中抓取唯一的元组,不管顺序如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35975441/

相关文章:

python - 并行排序两个 numpy 矩阵,逐行排序

python - 如何在 numpy 中创建反对角单位矩阵(其中对角线从左向右翻转)

python - 重复访问多个文件时出错

python - 通过 URL 打开 XML 文件并保存

python - Word2Vec:使用 Gensim 上传预先训练的 word2vec 文件时收到错误

python - 如何计算 Pandas 数据框中单元格的项目数(或长度)?

python - 将文件中的普通数字转换为整数列表

python - 使用 numpy.save (和 savez)出现意外类型错误

java - 如何使用 spring boot java 将包含列表的 json 保存到 mysql

c# - 为什么我的列表中的成员会被所述列表的最后一个成员覆盖?