Python 세트에서 세트 제거
내장형 5.7 Set Types에 대한 Python 2.7.2 문서에 대한 나의 해석에 따르면 , A를 set.remove(elem)
또는 에 전달하여 집합 B에서 집합 A의 요소를 제거 할 수 있어야합니다.set.discard(elem)
2.7.2에 대한 문서에서 :
의에 ELEM 인수를 참고
__contains__()
,remove()
및discard()
방법은 설정 될 수있다.
나는이를 통과 할 수 있음을 의미하는 것으로이 해석 set
에 remove(elem)
나 discard(elem)
와 모든 요소가 목표 세트에서 제거됩니다. 나는 이것을 사용하여 문자열에서 모든 모음을 제거 하거나 단어 빈도 히스토그램에서 모든 일반적인 단어를 제거 하는 것과 같은 이상한 일을 할 것 입니다. 다음은 테스트 코드입니다.
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [M...
Type "help", "copyright", "credits" or "license"
>>> a = set(range(10))
>>> b = set(range(5,10))
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b
set([8, 9, 5, 6, 7])
>>> a.remove(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: set([8, 9, 5, 6, 7])
>>> a.discard(b)
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>
내가 반환 할 것으로 예상되는 것 :
>>> a
set([0, 1, 2, 3, 4])
a.difference(b)
새 세트를 반환하는 이 작업을 수행 할 수 있다는 것을 알고 있습니다 . 또는 함께 set.difference_update(other)
; 또는 집합 연산자 a -= b
를 사용하여 그 자리에서 집합을 수정합니다.
그래서 이것은 문서의 버그입니까? set.remove(elem)
실제로 집합을 인수로 사용할 수 없습니까 ? 아니면 문서가 세트 세트를 참조합니까? 그게 difference_update
내 해석 을 완수 한 것을 감안할 때 , 나는 그 경우가 후자라고 생각합니다.
충분히 불분명합니까?
편집 3 년 동안의 추가 (일부 전문적인) 파이썬 작업 후 최근에이 질문으로 돌아와서 실제로 수행하려는 작업이 다음과 같이 수행 될 수 있음을 깨달았습니다.
>>> c = a.difference(b)
set([0,1,2,3,4])
이것이 제가 원래 얻으려고했던 것입니다.
편집 4 년 이상의 파이썬 개발 끝에 ... 나는이 작업이 세트 리터럴과 -
연산자를 사용하여 더 깔끔하게 표현 될 수 있다는 것을 깨달았습니다 . 세트 차이가 비 교환적임을 보여주는 것이 더 완벽하다는 것을 알 수 있습니다.
>>> a={0,1,2,3}
>>> b={2,3,4,5}
>>> a-b
set([0, 1])
>>> b-a
set([4, 5])
이미 질문에 답하셨습니다. 집합 집합 (실제로 frozenset을 포함하는 집합)을 나타냅니다.
참조하는 단락은 다음으로 시작합니다.
참고로, __contains __ (), remove () 및 ignore () 메서드에 대한 elem 인수는 집합 일 수 있습니다.
이는 b
in a.remove(b)
이 집합이 될 수 있음 을 의미 하며 다음을 계속합니다.
동등한 frozenset 검색을 지원하기 위해 elem 세트는 검색 중에 일시적으로 변경된 다음 복원됩니다. 검색하는 동안 elem 집합은 의미있는 값이 없으므로 읽거나 변경해서는 안됩니다.
즉 b
, 집합이면 해당되는 frozenset a.remove(b)
을 검색 a
하여 b
제거합니다 (또는 KeyError
존재하지 않는 경우 throw ).
a 는 변경 가능 하므로 Python에서 set
s를 가질 수 없습니다 . 대신 s를 가질 수 있습니다 . 반면에, 당신은 호출 할 수 있습니다 , 그리고 A를 . 이 예를 참조하십시오.set
set
set
frozenset
__contains__()
remove()
discard()
set
a = set([frozenset([2])])
set([2]) in a # you get True
a.remove(set([2])) # a is now empty
따라서 귀하의 질문에 대한 대답은 문서가 set
s of frozenset
s를 참조하고 있다는 것 입니다.
I'm looking at the built-in help for various versions of python (for mac). Here are the results.
- python2.5
remove(...)
Remove an element from a set; it must be a member.
If the element is not a member, raise a KeyError.
- python2.6
remove(...)
Remove an element from a set; it must be a member. If the element is not a member, raise a KeyError.
- python2.7
remove(...)
Remove an element from a set; it must be a member. If the element is not a member, raise a KeyError.
The documentation you refer to, in full, actually says:
Note, the elem argument to the
__contains__()
,remove()
, anddiscard()
methods may be a set. To support searching for an equivalent frozenset, the elem set is temporarily mutated during the search and then restored.
This seems to be a footnote, that suggests the argument may be a set, but unless it finds a matching frozen set within the set, it will not be removed. The mention about the set being modified is so it can be hashed to look for a a matching frozen set.
I think the documentation is referring to sets of (frozen)sets, yes.
참고URL : https://stackoverflow.com/questions/9056833/python-remove-set-from-set
'IT TIP' 카테고리의 다른 글
스레드와 프로세스에 대해 이야기 할 때 "동시에 플로피를 포맷하지 마십시오"라는 주석이 왜 재미 있었습니까? (0) | 2020.11.28 |
---|---|
MVC 모델 개체, 도메인 개체 및 DTO의 차이점은 무엇입니까? (0) | 2020.11.28 |
window.location이 변경되면 중단됩니까? (0) | 2020.11.28 |
Startup.Configure에서 비동기 작업을 어떻게 처리합니까? (0) | 2020.11.28 |
NGINX의 프록시 응답에서 URL을 어떻게 다시 작성합니까? (0) | 2020.11.27 |