it-swarm.com.ru

Получить уникальные значения в списке списков в Python

Я хочу создать список (или набор) всех уникальных значений, появляющихся в списке списков в Python . У меня есть что-то вроде этого:

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

и я хотел бы следующее:

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

Я знаю, что для списка строк вы можете просто использовать set (aList), но я не могу понять, как решить эту проблему в списке списков, так как set (aList) возвращает мне сообщение об ошибке 

unhashable type: 'list'

Как я могу решить это?

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

Вы можете использовать itertools 's chain , чтобы сгладить ваш массив и затем вызвать set для него:

from itertools import chain

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

Если вы ожидаете list объект:

print list(set(chain(*array)))
11
Tanveer Alam
array = [['a','b'], ['a', 'b','c'], ['a']]
unique_values = list(reduce(lambda i, j: set(i) | set(j), array))
3
no coder

Вы можете использовать numpy.unique :

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

Попробуй это.

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

Результат:

['a', 'c', 'b']
0
Haresh Shyara