Python에서 컬렉션의 각 세트에서 고유한 특징 얻기
Python에서 컬렉션의 각 세트에서 고유한 특징 얻기
itertools.chain 사용하기
itertools.chain
을 사용하여 모든 세트를 하나의 세트로 결합한 다음 set()
을 사용하여 중복 항목을 제거할 수 있습니다.
from itertools import chain
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
unique_features = set(chain(*sets))
print(unique_features) # {1, 2, 3, 4, 5}
reduce 사용하기
from functools import reduce
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
unique_features = reduce(set.union, sets)
print(unique_features) # {1, 2, 3, 4, 5}
for 루프 사용하기
for 루프를 사용하여 각 세트를 반복하고 각 세트의 고유한 특징을 추출할 수 있습니다.
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
unique_features = set()
for set in sets:
unique_features.update(set)
print(unique_features) # {1, 2, 3, 4, 5}
set.symmetric_difference 사용하기
set.symmetric_difference
를 사용하여 두 세트의 차이점을 구할 수 있습니다.
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
unique_features = sets[0].symmetric_difference(sets[1]).symmetric_difference(sets[2])
print(unique_features) # {1, 5}
이 방법은 컬렉션의 크기가 2보다 큰 경우에만 유용합니다.
collections.Counter 사용하기
collections.Counter
를 사용하여 각 항목의 발생 횟수를 계산한 다음 1보다 적은 횟수로 발생하는 항목을 제거할 수 있습니다.
from collections import Counter
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
counts = Counter(chain(*sets))
unique_features = {key for key, count in counts.items() if count < 2}
print(unique_features) # {1, 5}
이 방법은 컬렉션의 크기가 크고 고유한 특징의 수가 적은 경우에 유용합니다.
결론
예제 코드
# 1. itertools.chain 사용하기
from itertools import chain
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
unique_features = set(chain(*sets))
print(unique_features) # {1, 2, 3, 4, 5}
# 2. reduce 사용하기
from functools import reduce
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
unique_features = reduce(set.union, sets)
print(unique_features) # {1, 2, 3, 4, 5}
# 3. for 루프 사용하기
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
unique_features = set()
for set in sets:
unique_features.update(set)
print(unique_features) # {1, 2, 3, 4, 5}
# 4. set.symmetric_difference 사용하기
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
unique_features = sets[0].symmetric_difference(sets[1]).symmetric_difference(sets[2])
print(unique_features) # {1, 5}
# 5. collections.Counter 사용하기
from collections import Counter
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
counts = Counter(chain(*sets))
unique_features = {key for key, count in counts.items() if count < 2}
print(unique_features) # {1, 5}
설명
개선점
- 코드를 더 간결하게 만들 수 있습니다.
- 코드에 대한 설명을 추가할 수 있습니다.
- 더 많은 예시를 추가할 수 있습니다.
대체 방법
list comprehension 사용하기
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
unique_features = {feature for set in sets for feature in set}
print(unique_features) # {1, 2, 3, 4, 5}
map과 set 사용하기
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
unique_features = set(map(set, sets))
print(unique_features) # {1, 2, 3, 4, 5}
itertools.starmap 사용하기
from itertools import starmap
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
unique_features = set(starmap(set, sets))
print(unique_features) # {1, 2, 3, 4, 5}
numpy 사용하기
numpy
를 사용하여 컬렉션을 배열로 변환한 다음 numpy.unique
를 사용하여 고유한 특징을 추출할 수 있습니다.
import numpy as np
sets = [{1, 2, 3}, {2, 3, 4}, {3, 4, 5}]
unique_features = np.unique(np.array(sets))
print(unique_features) # [1 2 3 4 5]
결론
python set