我想创建一个列表(或集合),显示在python列表中出现的所有唯一值。 我有这样的事情:
aList=[['a','b'], ['a', 'b','c'], ['a']]
我想要以下内容:
unique_values=['a','b','c']
我知道对于一个字符串列表你可以使用set(aList),但我无法想出如何在列表列表中解决这个问题,因为set(aList)会得到错误信息
unhashable type: 'list'
我该如何解决?
答案 0 :(得分:26)
array = [['a','b'], ['a', 'b','c'], ['a']]
result = set(x for l in array for x in l)
答案 1 :(得分:12)
您可以使用itertools
的chain
展开您的数组,然后点击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)
我们可以使用利用 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
。