2017-02-05 2 views

ответ

3

Вы можете использовать set с пониманием списка:

lst = [(1,2),(1,3),(1,4),(1,5)] 

set(j for i in lst for j in i) 
# {1, 2, 3, 4, 5} 
+0

Это первый и самый простой/питонический способ решить вопрос. Отличный ответ. –

+2

Вы также можете использовать множество понятий: '{j для i в lst для j в i}'. :) – MSeifert

1

Используйте chain.from_iterable от модуля itertools. Обычно считается, что это идиоматический способ сгладить 2D-итерацию, а не вложенное понимание списка. См. Вопрос this.

>>> from itertools import chain 
>>> set(chain.from_iterable([(1,2),(1,3),(1,4),(1,5)])) 
{1, 2, 3, 4, 5} 

chain.from_iterable сглаживает список и set сохраняет только уникальные значения.

Чтобы преобразовать обратно в список, просто перейдите к конструктору list.

>>>list(set(chain.from_iterable([(1,2),(1,3),(1,4),(1,5)]))) 
[1, 2, 3, 4, 5] 
0

В ожидаемом выходе порядок уникальных элементов соответствует порядку появления. Один из способов сделать это было бы (используя внешнюю библиотеку, но рецепты в докладе доступны itertools-recipes section):

>>> from iteration_utilities import flatten, unique_everseen 

>>> x = [(1,2),(1,3),(1,4),(1,5)] 

>>> list(unique_everseen(flatten(x))) 
[1, 2, 3, 4, 5] 
Смежные вопросы