본문 바로가기
파이썬

파이썬에서 집합 작업에 대 업데이트 추가

by º기록 2020. 11. 28.
반응형

세트에 단일 값을 추가하려는 경우 Python에서 추가 및 업데이트 작업의 차이점은 무엇입니까?

a = set()
a.update([1]) #works
a.add(1) #works
a.update([1,2])#works
a.add([1,2])#fails 

누군가 이것이 왜 그렇게 설명 할 수 있습니까?

 

해결 방법

 


set.add 는 집합에 개별 요소를 추가합니다. 그래서,

>>> a = set()
>>> a.add(1)
>>> a
set([1])

작동하지만 해시 가능하지 않는 한 iterable과 함께 작동하지 않습니다. 이것이 a.add ([1, 2]) 가 실패하는 이유입니다.

>>> a.add([1, 2])
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: unhashable type: 'list'





>>> a.update(1)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'int' object is not iterable

그러나 다음은 목록 [1] 이 반복되고 목록의 요소가 세트에 추가되기 때문에 작동합니다.

>>> a.update([1])
>>> a
set([1])

set.update 는 기본적으로 내부 집합 통합 작업과 동일합니다. 다음과 같은 경우를 고려하십시오.

>>> set([1, 2]) | set([3, 4]) | set([1, 3])
set([1, 2, 3, 4])
>>> set([1, 2]) | set(range(3, 5)) | set(i for i in range(1, 5) if i % 2 == 1)
set([1, 2, 3, 4])

여기에서 모든 이터 러블을 집합으로 명시 적으로 변환 한 다음 합집합을 찾습니다. 여러 개의 중간 집합과 공용체가 있습니다. 이 경우 set.update 는 좋은 도우미 함수 역할을합니다. iterable을 받아들이 기 때문에 간단히 할 수 있습니다.

>>> a.update([1, 2], range(3, 5), (i for i in range(1, 5) if i % 2 == 1))
>>> a
set([1, 2, 3, 4])

 

참조 페이지 https://stackoverflow.com/questions/28845284

 

 

반응형

댓글