我很好奇这种独特的数据对象是多么有效:
testdata =[ ['9034968', 'ETH'], ['14160113', 'ETH'], ['9034968', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15724032', 'ETH'], ['15481740', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['10307528', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['15481740', 'ETH'], ['15379365', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15379365', 'ETH']
]
对于每个数据对,左侧数字字符串PLUS右侧的类型表示数据元素的唯一性。它返回一个与testdata相同的列表列表,但只存在唯一的。
此致
答案 0 :(得分:76)
您可以使用一套:
unique_data = [list(x) for x in set(tuple(x) for x in testdata)]
您还可以看到this page对保留或不保留顺序的各种方法进行基准测试。
答案 1 :(得分:8)
我尝试了@Mark的回答并得到了一个错误。将列表和每个元素转换为元组使其工作。不确定这是否是最佳方式。
list(map(list, set(map(lambda i: tuple(i), testdata))))
当然,使用列表推导可以表达同样的事情。
[list(i) for i in set(tuple(i) for i in testdata)]
我使用的是Python 2.6.2。
<强>更新强>
@Mark后来改变了他的回答。他目前的答案使用元组并且会起作用。我的意思是:)。
更新2
感谢@Mark。我已经改变了我的答案,返回列表而不是元组列表。
答案 2 :(得分:1)
import sets
testdata =[ ['9034968', 'ETH'], ['14160113', 'ETH'], ['9034968', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15724032', 'ETH'], ['15481740', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['10307528', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['15481740', 'ETH'], ['15379365', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15379365', 'ETH']]
conacatData = [x[0] + x[1] for x in testdata]
print conacatData
uniqueSet = sets.Set(conacatData)
uniqueList = [ [t[0:-3], t[-3:]] for t in uniqueSet]
print uniqueList
答案 3 :(得分:0)
在@Mark Byers解决方案上稍作扩展,您还可以进行列表理解和类型转换,以获得所需的内容:
testdata = list(set(tuple(x) for x in testdata))
此外,如果您不喜欢列表理解,因为许多人都感到困惑,则可以在for循环中执行相同的操作:
for i, e in enumerate(testdata):
testdata[i] = tuple(e)
testdata = list(set(testdata))
答案 4 :(得分:0)
如果您有对象列表,则可以将@Mark Byers答案修改为:
unique_data = [list(x) for x in set(tuple(x.testList) for x in testdata)]
其中testdata是对象列表,其中具有testList列表作为属性。
答案 5 :(得分:0)