2011-11-10 4 views
1

세트 주문하십시오 : 그것은 왜파이썬 : 숫자 코드로

set([64, 256, 4, 8, 9, 16, 81, 27]) 

정렬되지 않습니다

print set(a**b for a in range(2, 5) for b in range(2, 5)) 

나는이 답변을 얻을?

+0

참조 [파이썬 OrderedSet에있는 .index() 메소드 (http://stackoverflow.com/questions/7998692/python-orderedset-with-index-method/ 7998819 # 7998819) 또 다른'OrderedSet' 질문이나 좋은 구현을 위해 http://code.activestate.com/recipes/576694/; 또한 [파이썬에는 순서가있는 세트가 있습니까?] (0120-13756) – agf

+0

예상되는 순서는 무엇입니까? '4, 8, 16, 9, 27, 81, 64, 256'또는 '4,8,9,16,27,64,81,256'또는 다른 것? –

+0

@gnibbler 예! – kame

답변

7

세트는 파이썬 또는 다른 언어로 된 콜렉션이 아닙니다.

세트는 일반적으로 해시 키 (해시 코드)를 사용하여 구현됩니다. 따라서 순서는 아마도 요소의 자연 순서 대신 해시 함수를 사용하는 방법과 관련이 있습니다.

주문이 필요한 경우 목록을 사용해보십시오.

+1

이것은 질문에 대답하지 않습니다. –

+5

@Andrew : 정말요? * 나에게 대답하는 것처럼 들리네. – cHao

+2

'정렬 (범위 (2, 5)의 b에 대해 범위 (2, 5)에 대해 ** a b))'그것을 순서 목록으로 변환합니다 –

2

집합은 성격에 따라 순서가 다릅니다. documentation에서 :

집합 개체는 정렬 할 수없는 고유 한 해시 가능한 개체 모음입니다.

O (1) 멤버십 테스트를 용이하게하는 해시 테이블을 사용하여 구현됩니다. 당신이 주문한 세트가 필요한 경우, OrderedDict.fromkeys()을 시도 :

from collections import OrderedDict 
OrderedDict.fromkeys(a**b for a in range(2, 5) for b in range(2, 5)) 
관련 문제