Python의 집합은 반복되지 않는 요소의 순서가 지정되지 않은 집합입니다. 기본 기능에는 관계 테스트 및 중복 요소 제거가 포함되며 합집합, 교집합, 차이 및 차이와 같은 수학 연산도 지원합니다. (대칭 차이 집합).
sets는 x in set, len(set) 및 for x in set을 지원합니다. 순서가 지정되지 않은 컬렉션인 세트는 요소 위치나 삽입 지점을 기록하지 않습니다. 따라서 세트는 인덱싱, 슬라이싱 또는 기타 시퀀스와 유사한 작업을 지원하지 않습니다.
다음은 설명하기 위한 간단한 예입니다.
>>> x = 집합('스팸')
>>> y = 집합(['h','a','m'])
>>> x, y
(set(['a', 'p', 's', 'm']), set(['a', 'h', 'm']) )
좀 더 작은 애플리케이션입니다.
>>> x & y # 교차점
set(['a', 'm'])
>>> x | y # 합집합
set(['a', 'p', 's', 'h', 'm'])
>>> x - y # 차이 집합
set( [ 'p', 's'])
방대한 목록에서 중복된 요소를 제거하는 방법을 한 네티즌이 물었던 기억이 납니다. 해시를 사용하여 해결하는 것도 가능하지만 성능이 좋지 않은 것 같습니다. 매우 높습니다. 이를 해결하려면 set을 사용하는 것이 좋습니다. 예는 다음과 같습니다.
>>> a = [11,22,33,44,11,22]
>>> b = 집합(a)
>>> b
집합([33, 11, 44, 22])
>>> c = [i for i in b]
>>> > c
[33, 11, 44, 22]
멋지네요 몇 번만 하면 할 수 있어요 윤곽.
1.8 컬렉션
컬렉션은 정렬되지 않은 개체 그룹을 포함하는 데 사용됩니다. 집합을 만들려면 set() 함수를 사용하고 다음과 같은 일련의 항목을 제공하세요.
s = set([3,5,9,10]) #숫자 집합 만들기
t = set("Hello") # 고유 문자 집합 만들기
리스트 및 튜플과 달리 집합은 순서가 없으며 숫자로 색인을 생성할 수 없습니다. 또한 컬렉션의 요소는 반복될 수 없습니다. 예를 들어 이전 코드에서 t 세트의 값을 확인하면 결과는 다음과 같습니다.
>>> t
set(['H', 'e', 'l', 'o' ])
'l'은 하나만 나타납니다.
Set은 합집합, 교집합, 차이 및 대칭 차이를 포함한 일련의 표준 연산을 지원합니다. 예:
a = t | s # t와 s의 합집합
b = t & s # t와 s의 교집합
c = t – s # 차이 집합 찾기(항은 t에 있지만 s에는 없음)
d = t ^ s # 대칭 차이 집합(항목이 t 또는 s에 있지만 동시에 둘 다는 아님)
기본 작업:
t.add( 'x') # 항목 추가
s.update([10,37,42]) # s에 여러 항목 추가
remove()를 사용하여 항목 삭제:
t.remove('H')
len(s)
set의 길이
x in s
x가 다음과 같은지 테스트합니다. s
s의 멤버 x가 s
x가 s
s.issubset(t)
s
s의 모든 요소가 t에 있는지 테스트
s.issuperset(t)
s >= t
t의 모든 요소가 An에 있는지 테스트 요소가 s
s.union(t)
s에 있음 | t
s와 t
의 각 요소를 포함하는 새 집합을 반환합니다. Intersection(t)
s & t
s와 t
s.difference(t)
s의 공통 요소를 포함하는 새 세트를 반환합니다. - t
s에는 있지만 t에는 없는 요소를 포함하는 새 세트를 반환합니다.
s.symmetric_difference(t)
s ^ t
s와 t의 고유 요소를 포함하는 새 세트
s.copy()
세트 "s"의 얕은 복사본을 반환합니다.
참고: 비연산자(예: , s.union()) 버전의 Union(), Intersection(), Difference() 및 symmetric_difference()는 모든 반복 가능 항목을 인수로 허용합니다. 대조적으로, 연산자 기반 대응물은 인수를 설정해야 합니다. 이는 가독성을 높이기 위해 set('abc').intersection('cbs') 대신 set('abc') & 'cbs'를 사용하는 것과 같은 잠재적인 오류를 방지합니다. 버전 2.3.1에서 변경된 사항: 이전에는 모든 매개변수를 설정해야 했습니다.
또한 Set과 ImmutableSet 모두 세트 간 비교를 지원합니다. 두 집합은 다음과 같은 경우에만 동일합니다. 각 집합의 요소가 다른 집합의 요소입니다(서로의 하위 집합임). 한 세트는 첫 번째 세트가 두 번째 세트의 하위 세트인 경우에만 다른 세트보다 작습니다(하위 세트이지만 동일하지 않음). 한 세트는 첫 번째 세트가 두 번째 세트의 상위 세트인 경우에만 다른 세트보다 강력합니다(상위 세트이지만 동일하지는 않음).
하위 집합 및 동등 비교는 전체 정렬 기능을 생성하지 않습니다. 예를 들어 두 집합은 서로 같지도 않고 부분 집합도 아니므로 다음 작업은 False를 반환합니다. ab. 따라서 세트는 __cmp__ 메서드를 제공하지 않습니다.
세트는 정렬 기능(하위 세트 관계)의 일부만 정의하므로 list.sort() 메서드의 출력은 세트 목록에 대해 정의되지 않습니다.
연산자
연산 결과
hash(s)
s의 해시 값을 반환합니다
다음 표에는 Set에는 사용할 수 있지만 ImmutableSet에는 사용할 수 없는 작업이 나열되어 있습니다.
연산자(voperator)
는
작업 결과
s.update(t)s |= t세트 "t"에 요소를 추가한 후 세트 "s"를 반환합니다.s.intersection_update(t )s &= t세트 "t" s.difference_update(t)s의 요소를 포함하는 세트 "s"만 반환합니다. - = t세트 "t"에 포함된 요소를 삭제한 후 세트 "s"s.symmetric_difference_update(t)s ^=를 반환합니다. t세트 "s"s.add(x)세트 "s"에 요소 x를 추가합니다
s.remove(x)
세트 "s"에서 요소 x를 제거합니다. 존재하지 않으면 KeyError가 발생합니다
s.discard(x)
요소 x가 집합 “s”에 존재하는 경우
s.pop()
삭제하고 집합 “s”로 돌아감 불확정 요소, 비어 있으면 KeyError update(), Intersection_update(), Difference_update() 및 symmetric_difference_update()의 기호 버전은 모든 반복 가능 항목을 인수로 허용합니다. 버전 2.3.1에서 변경된 사항: 이전에는 모든 매개변수를 설정해야 했습니다.
또한 참고: 이 모듈에는 update() 메서드의 별칭인 Union_update() 메서드도 포함되어 있습니다. 이 방법은 이전 버전과의 호환성을 위해 포함되었습니다. 프로그래머는 update() 메서드를 더 자주 사용해야 합니다. 이 메서드는 내장 set() 및 Frozenset() 유형에서도 지원되기 때문입니다.