2012-07-01 3 views
0

번호 목록에서 각각 2 개의 요소로 구성된 고유 한 순서가없는 세트를 만들어야합니다. 그런 다음 각 세트를 목록에 삽입하십시오.목록에 고유 한 순서가없는 세트를 추가하십시오.

예 :

  1. setslist = (2,1)]
  2. 의 uniquenumbers = [1,2,3]
  3. 고유 세트 - (1,2), (2,3) , (1,3)
  4. 각 세트를 setslist에 삽입하십시오 (아직없는 경우). (세트 순서가 있습니다. 그래서 (1,2)과 동일 (2,1))
  5. 최종

setslist = [(2,1),(2,3),(1,3)] 파이썬에서 가장 최적화 된 솔루션은 무엇입니까?

+0

합니까'주문해야 setslist'? –

+0

아니요 .. (1,2) 일 수도 있습니다. – jerrymouse

+0

나는 그 자체를 의미합니다. 'list' 대신'set'이 될 수 있습니까? –

답변

2
import itertools 
existing_sets = set(frozenset(x) for x in setslist) 
new_sets = set(frozenset(x) for x in itertools.combinations(uniquenumbers, 2)) 
setslist = list(existing_sets | new_sets) 
+0

+1 @ amber that worked :) – jerrymouse

1

frozenset을 대신 사용하고 set에 추가하십시오.

+0

약간의 예제를 추가하십시오 – jerrymouse

+1

'frozenset'을 만들거나'set'에 항목을 추가하는 것 중? –

+0

+1 이그나시오, 처음으로 frozenset을 사용하여, 그들은 훌륭합니다. – jerrymouse

5
>>> from itertools import combinations 
>>> lis=[1,2,3,4,5] 
>>> [x for x in combinations(lis,2)] 
[(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)] 
+0

+1 @Ashwini 감사합니다 :) – jerrymouse

1

frozenset에 대한 이그나시오의 조언을 확장하려면 :

In [1]: from itertools import combinations 

In [2]: sets = set([frozenset([1, 2])]) 

In [3]: uniquenumbers = [1,2,3] 

In [4]: sets.update(map(frozenset, combinations(uniquenumbers, 2))) 

In [5]: sets 
Out[5]: set([frozenset([1, 3]), frozenset([1, 2]), frozenset([2, 3])]) 
+0

+1 @Lev Thanks :) – jerrymouse

관련 문제