Ответ 1
array = [['a','b'], ['a', 'b','c'], ['a']]
result = set(x for l in array for x in l)
Я хочу создать список (или набор) всех уникальных значений, отображаемых в списке списков в 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 = set(x for l in array for x in l)
Вы можете использовать itertools
chain
, чтобы сгладить массив, а затем вызвать 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']
Попробуйте это.
array = [['a','b'], ['a', 'b','c'], ['a']]
res=()
for item in array:
res = list(set(res) | set(item))
print res
Вывод:
['a', 'c', 'b']
Ответы с 2 голосами не спомогли мне, я не уверен почему (но у меня есть целочисленные списки). В конце я делаю это:
unique_values = [list(x) for x in set(tuple(x) for x in aList)]