Python에서 집합을 초기화하기 위해 물결 괄호 사용
파이썬을 배우고 있는데, 세트 초기화에 대한 초보적인 질문이 있습니다.테스트를 통해 세트를 다음과 같이 초기화할 수 있다는 것을 알게 되었습니다.
my_set = {'foo', 'bar', 'baz'}
다음과 같은 일반적인 방법과 달리 이러한 방법을 사용할 경우의 단점이 있습니까?
my_set = set(['foo', 'bar', 'baz'])
아니면 단지 스타일의 문제인가요?
세트 리터럴 구문에는 두 가지 분명한 문제가 있습니다.
my_set = {'foo', 'bar', 'baz'}
파이썬 2.7 이전에는 사용할 수 없습니다.
해당 구문을 사용하여 빈 집합을 표현할 수 없습니다(사용).
{}
빈 딕트 생성)
그것들은 당신에게 중요할 수도 있고 그렇지 않을 수도 있습니다.
이 구문을 설명하는 문서 섹션은 다음과 같습니다.
또한 차이를 비교합니다.{}
그리고.set()
단 한 마디의 논쟁으로
>>> a = set('aardvark')
>>> a
{'d', 'v', 'a', 'r', 'k'}
>>> b = {'aardvark'}
>>> b
{'aardvark'}
그러나 둘 다a
그리고.b
물론입니다.
Python 3 설명서(Python 2.7에서도 동일)에서 다음을 수행합니다.
물결 괄호 또는 set() 함수를 사용하여 집합을 만들 수 있습니다.참고: 빈 집합을 만들려면 {}이(가) 아닌 set()을 사용해야 합니다. 후자는 다음 섹션에서 설명하는 데이터 구조인 빈 사전을 만듭니다.
python 2.7에서:
>>> my_set = {'foo', 'bar', 'baz', 'baz', 'foo'}
>>> my_set
set(['bar', 'foo', 'baz'])
알아두시기 바랍니다.{}
에도 사용됩니다.map
/dict
:
>>> m = {'a':2,3:'d'}
>>> m[3]
'd'
>>> m={}
>>> type(m)
<type 'dict'>
또한 포괄적인 구문을 사용하여 집합을 초기화할 수 있습니다.
>>> a = {x for x in """didn't know about {} and sets """ if x not in 'set' }
>>> a
set(['a', ' ', 'b', 'd', "'", 'i', 'k', 'o', 'n', 'u', 'w', '{', '}'])
당신은 해야 합니다.empty_set = set()
빈 집합을 초기화합니다.{}
비어 있음dict
.
아무도 이에 대해 언급하지 않은 것은 놀라운 일이지만, 이 두 구문 사이에는 실제로 제가 알 수 있는 것과는 차이가 있는 것 같습니다. 즉, 성능/최적화입니다.
대부분의 상황에서 차이는 무시할 수 있어야 하지만, 당신의 예에서 다음은 다음과 같습니다.set
항목에서 직접:
my_set = {'foo', 'bar', 'baz'}
다음은 다음을 생성하는 동안list
그리고 나서 그것을 그에게 전달합니다.set
생성자:
my_set = set(['foo', 'bar', 'baz'])
최종 결과는 동일하지만, 우리는 두 가지 약간 다른 방법으로 결과를 얻고 있습니다.예상하신 대로, 두 번째 것은 조금 느립니다.
❯ python -m timeit 'my_set = {"foo", "bar", "baz"}'
10000000 loops, best of 5: 37.3 nsec per loop
❯ python -m timeit 'my_set = set(["foo", "bar", "baz"])'
5000000 loops, best of 5: 92.3 nsec per loop
제가 아는 한,{}
문자 그대로의 구문은 다음을 구성할 때 중간 편집기를 만드는 것을 건너뛸 수 있는 유일한 방법입니다.set
개인적으로 좀 이상한 것 같아요.set
생성자는 대신 다음과 같은 다양한 수의 위치 인수를 사용하도록 설계되지 않았습니다.
# This usage is invalid in real Python. If it existed,
# I would expect the call to be exactly equivalent
# to the performance of the literal syntax.
>>> set("foo", "bar", "baz")
# You would then construct a `set` from an existing
# `list` by simply unpacking the sequence.
>>> set(*["foo", "bar", "baz"])
안타깝게도 해당 서명은 존재하지 않습니다.
언급URL : https://stackoverflow.com/questions/17373161/use-curly-braces-to-initialize-a-set-in-python
'source' 카테고리의 다른 글
Spring Boot 2 - 콩이 초기화되기 전에 조치를 취합니다. (0) | 2023.07.21 |
---|---|
비어 있지 않은 오라클의 기존 테이블에 자동 증분 ID를 추가하는 중 (0) | 2023.07.21 |
SQL DateTime에 대한 링크 값은 로컬(Kind=Unspecified)입니다. UTC로 만들려면 어떻게 해야 합니까? (0) | 2023.07.21 |
ORA-00980 동의어 변환은 PLSQL에서 더 이상 유효하지 않습니다. (0) | 2023.07.21 |
하루의 시간을 어떻게 비교합니까? (0) | 2023.07.21 |