2017-03-08 3 views
0

을 감안할 때 두 개의리스트 : 두 목록의 결합을 얻기의 이러한 두 가지 방법의 차이점은 무엇파이썬에서 두리스트의 합집합을 얻는 두 가지 방법의 차이점은 무엇입니까? 파이썬에서

>>> a = [1,2,3,4,5,6,'b','e'] 
>>> b = [1,2,3,4,5,'a','b','c','d',] 

?

>>> set(a).union(set(b)) 
set(['a', 1, 2, 3, 4, 5, 6, 'c', 'b', 'e', 'd']) 
>>> set(a+b) 
set(['a', 1, 2, 3, 4, 5, 6, 'c', 'b', 'e', 'd']) 

논리적 차이점 (이 두 가지 방법이 동일한 결과를 제공하지 못할 수있는 상황)이 있습니까? 성능에 영향이 있습니까?

+2

이 질문에 불분명 한 사람은 누구나 깃발을 철회하십시오. 그것은 꽤 명확하다 IMO –

답변

2

구현의 세부 사항은 상이하다 :

방법 A :

  1. 목록 b
  2. 요소의 집합을 생성 목록 a
  3. 요소의 집합을 만들
  4. 은 1과 2의 집합에 set.union을 사용하여 병합합니다.

2 단계는 여기서 낭비입니다. set(a).union(b)도 제대로 작동합니다.

방법 B :

  1. b
  2. 가 1

에서 작성된리스트에서 집합을 생성 목록 a 및리스트의 요소로부터 새로운리스트를 생성 결과에 차이가 없다. 같은 일을하는 다른 방법. 사용되는 중간 콜렉션 수가 적기 때문에 메소드 B가 빠릅니다.

+0

큰 입력에 대해'set (a) .union (b)'이 가장 빠를 것이라고 생각하겠다. (내 전화 atm에 백업 할 것이 없다.) – miradulo

+0

@ Mitch http://stackoverflow.com/questions/4674208/is-it-faster-to-union-sets-or-check-the-whole-list-for-a-duplicate –

+0

주문 항목이 (반복 또는 인쇄 할 때)'set'에 나타나는 것은 정의되지 않았고 구현에 의존합니다. 동등한 세트를 만드는 두 가지 다른 방법으로 인해 반복 순서가 달라질 수 있습니다. 그것은 임의의 합리적인 코드 (반복 순서를 임의적으로 다룰 것임)와 관련이 없지만 두 가지 접근법의 결과간에 * 작은 * 차이가있을 수 있습니다. – Blckknght

관련 문제