Python:列表列表的唯一性

Hel*_*nar 46 python unique

我很好奇什么是独特的这种数据对象的有效方式:

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']
]
Run Code Online (Sandbox Code Playgroud)

对于每一个数据对,左侧的数字串PLUS在合适的类型告知的数据元素的唯一性.它返回与testdata相同的列表列表,但只存在唯一身份证.

问候

Mar*_*ers 87

你可以使用一套:

unique_data = [list(x) for x in set(tuple(x) for x in testdata)]
Run Code Online (Sandbox Code Playgroud)

您还可以看到此页面对各种方法进行基准测试,这些方法可以保留或不保留顺序.


Man*_*dan 8

我试过@Mark的回答并得到了一个错误.将列表和每个元素转换为元组使其工作.不知道这是否是最佳方式.

list(map(list, set(map(lambda i: tuple(i), testdata))))
Run Code Online (Sandbox Code Playgroud)

当然,使用列表理解可以表达同样的事情.

[list(i) for i in set(tuple(i) for i in testdata)]
Run Code Online (Sandbox Code Playgroud)

我使用的是Python 2.6.2.

更新

@Mark后来改变了他的回答.他目前的答案使用元组并且会起作用.我的意思是:)

更新2

感谢@Mark.我已经改变了我的答案,返回列表而不是元组列表.


Sha*_*ica 5

使用uniqueinnumpy来解决这个问题:

import numpy as np

np.unique(np.array(testdata), axis=0)
Run Code Online (Sandbox Code Playgroud)

请注意,axis需要指定关键字,否则列表将首先被展平。

或者,使用vstack

np.vstack({tuple(row) for row in testdata})
Run Code Online (Sandbox Code Playgroud)