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

StackOverflow https://stackoverflow.com/questions/2151517

  •  23-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Какой самый простой способ сделать это?(Я вынужден использовать Python 2.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])

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

Другие советы

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

   import itertools

   ...

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

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

Объединения не поддерживаются списками, которые упорядочены, но поддерживаются наборами.Проверьте множество.объединение.

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

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 ]

Вы также можете следовать этому стилю

In [12]: a = ['Orange and Banana', 'Orange Banana']
In [13]: b = ['Grapes', 'Orange Banana']
In [14]: c = ['Foobanana', 'Orange and Banana']

In [20]: list(set(a) | set(b) | set(c))
Out[20]: ['Orange and Banana', 'Foobanana', 'Orange Banana', 'Grapes']

In [21]: list(set(a) & set(b) | set(c))
Out[21]: ['Orange and Banana', 'Foobanana', 'Orange Banana']    
desired_result = [x for y in lists for x in y]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top