在python中的列表列表中获取唯一值

时间:2015-06-01 04:44:58

标签: python list set unique

我想创建一个列表(或集合),显示在python列表中出现的所有唯一值。 我有这样的事情:

aList=[['a','b'], ['a', 'b','c'], ['a']]

我想要以下内容:

unique_values=['a','b','c']

我知道对于一个字符串列表你可以使用set(aList),但我无法想出如何在列表列表中解决这个问题,因为set(aList)会得到错误信息

unhashable type: 'list'

我该如何解决?

7 个答案:

答案 0 :(得分:26)

array = [['a','b'], ['a', 'b','c'], ['a']]
result = set(x for l in array for x in l)

答案 1 :(得分:12)

您可以使用itertoolschain展开您的数组,然后点击set

from itertools import chain

array = [['a','b'], ['a', 'b','c'], ['a']]
print set(chain(*array))

如果您期望list对象:

print list(set(chain(*array)))

答案 2 :(得分:3)

array = [['a','b'], ['a', 'b','c'], ['a']]
unique_values = list(reduce(lambda i, j: set(i) | set(j), array))

答案 3 :(得分:3)

您可以使用numpy.unique

import numpy
import operator
print numpy.unique(reduce(operator.add, [['a','b'], ['a', 'b','c'], ['a']]))
# ['a' 'b' 'c']

答案 4 :(得分:1)

2个投票最高的答案对我不起作用,我不确定为什么(但我有整数列表)。最后,我要这样做:

unique_values = [list(x) for x in set(tuple(x) for x in aList)]

答案 5 :(得分:0)

尝试这个。

array = [['a','b'], ['a', 'b','c'], ['a']]
res=()
for item in array:
    res = list(set(res) | set(item))
print res

输出:

['a', 'c', 'b']

答案 6 :(得分:0)

蟒蛇>= 3.5

我们可以使用利用 extended iterable unpacking 的更新语法。

from itertools import chain 

original_list = [['a','b'], ['a', 'b','c'], ['a']]

# To return a set
{*chain.from_iterable(original_list)}
# {'a', 'b', 'c'}

# Or, as a list
[*{*chain.from_iterable(original_list)}]
# ['c', 'b', 'a']

请注意,不维护订单。如果排序很重要,那么 python >= 3.7 用户可以使用标准的 python dict 来按照遇到的顺序获取唯一元素:

[*dict.fromkeys(chain.from_iterable(original_list))]
# ['a', 'b', 'c']

在较低版本上,如果需要订购,请改用 collections.OrderedDict