set () 함수 이해
파이썬에서는 set()
중복 요소가없는 순서가 지정되지 않은 컬렉션입니다. 그러나 출력을 생성하는 방법을 이해할 수 없습니다.
예를 들어 다음을 고려하십시오.
>>> x = [1, 1, 2, 2, 2, 2, 2, 3, 3]
>>> set(x)
set([1, 2, 3])
>>> y = [1, 1, 6, 6, 6, 6, 6, 8, 8]
>>> set(y)
set([8, 1, 6])
>>> z = [1, 1, 6, 6, 6, 6, 6, 7, 7]
>>> set(z)
set([1, 6, 7])
출력은 set(y)
다음과 같아서는 안됩니다 . set([1, 6, 8])
? 위의 두 가지를 Python 2.6에서 시도했습니다.
당신이 말했듯이 세트는 순서가 없습니다. 세트를 구현하는 한 가지 방법은 트리를 사용하는 것이지만 해시 테이블을 사용하여 구현할 수도 있습니다 (정렬 된 순서로 키를 가져 오는 것이 그렇게 간단하지 않을 수 있음을 의미 함).
정렬하려면 다음을 수행하면됩니다.
sorted(set(y))
세트의 요소를 포함하는 정렬 된 목록을 생성합니다. (세트가 아닙니다. 다시 말하지만 세트는 순서가 없습니다.)
그렇지 않으면에서 보장하는 유일한 것은 set
요소를 고유하게 만드는 것입니다 (아무것도 두 번 이상 존재하지 않음).
도움이 되었기를 바랍니다!
순서화 된 콜렉션 유형으로 set([8, 1, 6])
동일하다 set([1, 6, 8])
.
설정된 내용을 정렬 된 순서로 표시하는 것이 더 좋을 수 있지만 repr()
호출 비용이 더 많이 듭니다.
내부적으로 set
유형은 해시 테이블을 사용하여 구현됩니다. 해시 함수는 항목이 집합의 일부인지 확인하는 데 필요한 동일 작업 수를 줄이기 위해 항목을 여러 버킷으로 분리하는 데 사용됩니다.
repr()
출력 을 생성하기 위해 각 버킷의 항목을 차례로 출력하므로 정렬 된 순서가 아닐 것입니다.
+ Volatility와 자신이 지적했듯이 세트는 순서가 없습니다. 요소가 순서대로 필요 sorted
하면 세트를 호출 하십시오.
>>> y = [1, 1, 6, 6, 6, 6, 6, 8, 8]
>>> sorted(set(y))
[1, 6, 8]
파이썬의 집합 (및 사전)은 어떤 순서로 반복되고 인쇄 되지만 정확히 그 순서는 임의적이며 추가 및 제거 후에도 동일하게 유지된다는 보장은 없습니다.
다음은 많은 값이 추가 된 후 제거 된 후 순서를 변경하는 집합의 예입니다.
>>> s = set([1,6,8])
>>> print(s)
{8, 1, 6}
>>> s.update(range(10,100000))
>>> for v in range(10, 100000):
s.remove(v)
>>> print(s)
{1, 6, 8}
이것은 구현에 따라 다르므로 의존해서는 안됩니다.
다른 답변을 읽은 후에도 왜 세트가 순서대로 나오지 않는지 이해 하지 못했습니다.
Mentioned this to my partner and he came up with this metaphor: take marbles. You put them in a tube a tad wider than marble width : you have a list. A set, however, is a bag. Even though you feed the marbles one-by-one into the bag; when you pour them from a bag back into the tube, they will not be in the same order (because they got all mixed up in a bag).
ReferenceURL : https://stackoverflow.com/questions/15181867/understanding-the-set-function
'Development Tip' 카테고리의 다른 글
Scala의 "접미사 작업" (0) | 2021.01.07 |
---|---|
백본 0.9.9 : listenTo와 on의 차이점 (0) | 2021.01.07 |
Qt5에서 JSon 파일을 생성 / 읽기 / 쓰기하는 방법 (0) | 2021.01.07 |
Mailgun : 메시지가 "수락 됨"이지만 배달 시간이 오래 걸리거나 배달되지 않음 (0) | 2021.01.07 |
Alamofire를 사용하여 각 요청 / 응답을 어떻게 기록 할 수 있습니까? (0) | 2021.01.07 |