我有一个 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/