Development Tip

set () 함수 이해

yourdevel 2021. 1. 7. 20:06
반응형

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

반응형