列表的独特性如何实现
我很好奇,有什么高效的方法可以让这些数据对象变得唯一:
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']
]
对于每一对数据,左边的数字字符串加上右边的类型可以确定这个数据元素的唯一性。返回的结果应该是一个列表,和测试数据的格式一样,但只保留唯一的值。
7 个回答
11
我试了@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。我已经把我的答案改成返回一个列表的列表,而不是一个元组的列表。
169
你可以使用一个集合(set):
unique_data = [list(x) for x in set(tuple(x) for x in testdata)]
你还可以查看这个页面,它对多种方法进行了性能测试,这些方法有的能保持顺序,有的则不能。