包含列表的列表列表中的唯一性

时间:2014-02-27 01:29:43

标签: python list

我有一个列表列表,其中一些列表中有一个列表:

x = [[[1,2],3],[[3,4],5], [[1,2],3]]

我尝试获得唯一性:

x = [[[1,2],3],[[3,4],5]]

但没有运气 - 任何想法?

我到目前为止使用过:

unique_data = [list(el) for el in set(tuple(el) for el in x)]

在列表列表中有效,但在列表中添加列表元素时失败

3 个答案:

答案 0 :(得分:7)

x = [[[1,2],3],[[3,4],5], [[1,2],3]]
print [item for idx, item in enumerate(x) if x.index(item) == idx]
# [[[1, 2], 3], [[3, 4], 5]]

我们可以像这样在O(N)中做到这一点

x = [[[1,2],3],[[3,4],5], [[1,2],3]]
x = tuple(tuple(tuple(j) if isinstance(j, list) else j for j in i) for i in x)
from collections import OrderedDict
print [[list(j) if isinstance(j, tuple) else j for j in i] for i in OrderedDict.fromkeys(x).keys()]
# [[[1, 2], 3], [[3, 4], 5]]

答案 1 :(得分:3)

这将做你想要的。

x = [[[1,2],3],[[3,4],5], [[1,2],3]]
p = {hash(str(item)): item for item in x}
uniques = [ val for val in p.values()]

答案 2 :(得分:0)

x = [[[1,2],3],[[3,4],5], [[1,2],3]]
z = []
for i in x:
    if i not in z:
    z.append(i)

print z
[[[1, 2], 3], [[3, 4], 5]]

这是你要找的吗?