목록 목록이 있습니다.
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])
세 개 이상의 목록으로이 작업을 수행 할 수도 있습니다.
union()
Python 버전 2.6 이상에 대한 여러 인수 만 지원합니다. 이전 버전을 사용하는 것 같으므로 명시적인 루프를 사용해야 할 것입니다. total = set(); for x in results_list: total.update(x)
(s /; / \ n /)
results_union = set.union(*(set(el) for el in results_list))
TypeError: descriptor 'union' requires a 'set' object but received a 'list'
in python 3.6 atleast.
set.union(*results_list)
메서드 설명자를 수동으로 바인딩합니다. 즉, 첫 번째 요소 results_list
를 "self"로 보냅니다 . 이로 인해 몇 가지 이상한 제한이 있습니다. 1. 제대로 입력하지 않습니다 (이제 첫 번째 요소는 집합 하위 클래스의 집합 또는 인스턴스 여야 함). 2. 빈 조합은 results_list
오류가됩니다 (잘못된 결과-빈 값을 반환해야 함). 세트).
itertools
패키지 에 담글 수있는 좋은 시간의 완벽한 예입니다 .
itertools.chain
그건 그렇고, Python 2.4에서도 잘 작동합니다.
이 스타일을 따를 수도 있습니다
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 ]