developer tip

여러 목록에 포함 된 모든 값의 합집합을 만드는 Pythonic 방법

optionbox 2020. 11. 27. 08:00
반응형

여러 목록에 포함 된 모든 값의 합집합을 만드는 Pythonic 방법


목록 목록이 있습니다.

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

   import itertools

   ...

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

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


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 ]

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

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]

참고 URL : https://stackoverflow.com/questions/2151517/pythonic-way-to-create-union-of-all-values-contained-in-multiple-lists

반응형