반응형
여러 목록에 포함된 모든 값의 결합을 만드는 Pythonic 방법
목록이 있습니다.
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)))
iter 도구는 일반적으로 반복기(그리고 많은 종류의 시퀀스 또는 컬렉션)와 함께 작업할 수 있는 좋은 방법이며, 저는 여러분이 그것에 익숙해지길 진심으로 추천합니다.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']
이해하는 방법으로:
[*{ j for i in lists for j in i }]
또는
[*functools.reduce(lambda x,y: {*x, *y}, lists)]
조합은 순서가 지정된 목록에서 지원되지 않지만 집합에서 지원됩니다.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 ]
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
반응형
'sourcetip' 카테고리의 다른 글
선형 레이아웃에서 단추 가운데 맞춤 (0) | 2023.08.01 |
---|---|
시스템.인수예외:테이블 형식 매개 변수에는 올바른 형식 이름이 있어야 합니다. (0) | 2023.08.01 |
NSURL 세션:URL 요청 시간을 늘리는 방법은 무엇입니까? (0) | 2023.08.01 |
탭 표시줄 항목 텍스트 제거, 이미지만 표시 (0) | 2023.08.01 |
Android 앱이 릴리스 인증서로 서명되었는지 확인하려면 어떻게 해야 합니까? (0) | 2023.08.01 |