[python] 여러 목록에 포함 된 모든 값의 합집합을 만드는 Python 방식

목록 목록이 있습니다.

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

이 목록을 병합하고 모든 중복 항목을 제거하고 싶습니다. 즉, 집합 결합 연산을 적용합니다.

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

이 작업을 수행하는 가장 쉬운 방법은 무엇입니까?



답변

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 버전에 대해 A가 필요하다면 Q에 언급하는 것이 좋을 것입니다 .-) 결과, 나는 추천한다 :

import itertools

...

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

itertools 는 일반적으로 반복자 (그리고 많은 종류의 시퀀스 또는 컬렉션에서)와 함께 작업 할 수있는 좋은 방법이며 익숙해 지길 진심으로 권장합니다. itertools.chain특히 여기 에 문서화되어 있습니다 .


답변

이 스타일을 따를 수도 있습니다

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']


답변

Union은 정렬 된 목록에서 지원되지 않지만 집합에서 지원됩니다. set.union을 확인하십시오 .


답변

나는 다음을 사용하여 교차로를 만들었으므로 세트가 필요하지 않습니다.

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 ]


답변

이해하기 :

[*{ j for i in lists for j in i }]

또는

[*functools.reduce(lambda x,y: {*x, *y}, lists)]


답변

desired_result = [x for y in lists for x in y]