繁体   English   中英

获取列表列表中的唯一值

[英]Get unique values in List of Lists

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

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

我想要以下内容:

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

我知道对于字符串列表,您可以只使用 set(aList),但我不知道如何在列表列表中解决这个问题,因为 set(aList) 会收到错误消息

unhashable type: 'list'

我该如何解决?

array = [['a','b'], ['a', 'b','c'], ['a']]
result = {x for l in array for x in l}

您可以使用itertoolschain来展平您的数组,然后在其上调用set

from itertools import chain

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

如果您需要一个list对象:

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

您可以使用numpy.unique

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

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

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

试试这个。

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

输出:

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

蟒蛇> = 3.5

我们可以使用更新的语法,利用扩展的可迭代解包

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM