Python에서 집합을 사용하는 이유

1. 다른 컬렉션의 중복을 제거할 때

집합에 아이템은 한 번만 저장될 수 있다. 그래서 다른 컬렉션의 중복을 제거하기 위해 사용될 수 있다.
다만, 집합에는 순서가 없기 때문에 아이템들의 순서가 바뀔 수 있다.

list_ = [1, 2, 2, 3, 3, 3, 4]
list_ = list(set(list_))
list_
#--==>> [1, 2, 3, 4]

 

2. 가변 객체들 간의 차이를 구할 때

집합은 리스트, 문자열, 가변 객체들 간의 차이를 구하고 싶을 때 사용될 수 있다.
다만, 여기서도 집합의 비정렬 특성으로 인해 결과의 순서는 원본과 다를 수 있다.

# 리스트의 차이
set([3, 5, 7]) - set([1, 2, 5])
#--==>> {3, 7}

# 문자열의 차이
set('abcd') - set('def')
#--==>>{'b', 'a', 'c'} 

# 혼합 타입의 차이
set('abcd') - set(['a', 'b', 'f'])
#--==>> {'c', 'd'}

 

3. 순서에 상관없이 두 객체가 같은지 비교할 때

집합을 이용해 순서에 상관없이 두 객체가 같은지 비교할 수 있다.
예를 들어 같은 내용의 결과를 다른 순서로 생성할 경우 사용할 수 있다.

list_1, list_2 = [1, 2, 3, 4], [4, 3, 2, 1]
list_1 == list_2
#--==>> False

# 순서에 상관없는 비교
set(list_1) == set(list_2)
#--==>> True

# 정렬해서 비교
sorted(list_1) == sorted(list_2)
#--> True

# 문자열도 가능
str_1, str_2 = 'abc', 'bca'
str_1 == str_2
#--> False
set(str_1) == set(str_2)
#--> True

 

4. 같은 거대한 데이터를 다룰 때

집합은 DB 쿼리 결과와 같이 거대한 데이터를 다룰 때 편리하다.

# 커피를 좋아하는 사람
coffee = {'kim', 'lee', 'park', 'cho'}
# 차를 좋아하는 사람
tea = {'kim', 'park', 'koo', 'ki'}

# cho는 커피를 좋아하는가?
'cho' in coffee
#--> True

# 커피와 차 둘다 좋아하는 사람
coffee & tea
{'kim', 'park'}

# 모든 사람
coffee | tea
#--> {'koo', 'cho', 'ki', 'kim', 'lee', 'park'}

# 커피만 좋아하는 사람
coffee - tea
#--> {'lee', 'cho'}

# 커피를 좋아하는 모든 사람들은 차를 좋아하는가?(포함 집합)
coffee > tea
#--> False

# lee는 차를 좋아하는가?(부분 집합)
{'lee'} < tea
#--> False

# 둘 중에 하나만 좋아하는 사람
coffee ^ tea
#--> {'koo', 'ki', 'cho', 'lee'}

'Python > Python' 카테고리의 다른 글

Python 에서의 Lambda method  (0) 2023.02.22
참조에 의한 변수와 객체 연결  (0) 2023.01.11
불변성과 문자열 수정  (0) 2023.01.06
반내림 vs 내림(Python3)  (0) 2023.01.05
컴프리헨션  (0) 2022.12.28