Pythonic способ создать объединение всех значений, содержавшихся в нескольких списках

У меня есть список списков:

lists = [[1,4,3,2,4], [4,5]]

Я хочу сгладить этот список и удалить все дубликаты; или другими словами, примените операцию объединения набора:

desired_result = [1, 2, 3, 4, 5]

Что самый легкий путь состоит в том, чтобы сделать это? (Я вынужден использовать Python 2.4 для этого проекта),

64
задан Aran-Fey 12 March 2019 в 20:01
поделиться

4 ответа

Set.union делает то, что вы хотите:

>>> results_list = [[1,2,3], [1,2,4]]
>>> results_union = set().union(*results_list)
>>> print(results_union)
set([1, 2, 3, 4])

Вы также можете сделать это с более чем двумя списками.

121
ответ дан 24 November 2019 в 15:49
поделиться

профсоюзы не поддерживаются спискими, которые заказываются, но поддерживаются наборами. Проверьте Set.union .

1
ответ дан 24 November 2019 в 15:49
поделиться

Так как вы, кажется, используете Python 2.5 (это , приятно упомянуть в своем q, если вам нужен A для версий для версий ! = 2.6, текущее производство один, кстати ;-) и хочу список, а не набор в результате, я рекомендую:

   import itertools

   ...

   return list(set(itertools.chain(*result_list)))

Itertools , как правило, является отличным способом работы с итераторами (и так с Многие виды последовательностей или коллекций), и я от всей души рекомендую вам познакомиться с ним. Itertools.Chain , в частности, документирован здесь .

11
ответ дан 24 November 2019 в 15:49
поделиться

Я использовал следующие пересечения, которые избегают необходимости наборов.

a, b= [[1,2,3], [1,2]]
s = filter( lambda x: x in b, a)

Или,

s = [ x for x in b if x in a ]
1
ответ дан 24 November 2019 в 15:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: