Python/파이썬 기초

파이썬 리스트 내 중복 원소만 추출/중복 제거 방법 정리

jimmy_AI 2022. 4. 19. 21:40
반응형

list 자료형 내 중복 원소 찾기, 제거하기

파이썬의 리스트 자료형에서 2번 이상 등장한 원소들만 추출하는 방법과

중복을 제거하여 고유한 값들만 남기는 방법에 대해서 살펴보겠습니다.

 

 

리스트 내 2회 이상 등장 원소만 추출

for문을 통해 각 원소를 순회하며 처음 등장한 값인지 여부를 판별하여

이미 이전에 등장했던 원소들만 솎아내어 중복 원소만 추출이 쉽게 가능합니다.

a = [1, 2, 3, 1, 2, 4, 5, 1]

x = [] # 처음 등장한 값인지 판별하는 리스트
new_a = [] # 중복된 원소만 넣는 리스트

for i in a:
    if i not in x: # 처음 등장한 원소
        x.append(i)
    else:
        if i not in new_a: # 이미 중복 원소로 판정된 경우는 제외
            new_a.append(i)

print(new_a) # [1, 2] # 2회 이상 등장한 값들만 담긴 리스트

 

혹은, 딕셔너리를 통하여 각 원소의 등장 횟수를 세어보는 방법도 있습니다.

이 방법으로는 n회 이상 등장한 값들만 추출하는 것으로도 확장이 가능합니다.

 

각 값들이 등장한 횟수를 세어 딕셔너리에 저장하는 코드는 아래와 같습니다.

b = ['a', 'a', 'b', 'b', 'c', 'd']

b_count = {} # 각 원소의 등장 횟수를 카운팅할 딕셔너리

for i in b:
    try: # 이미 등장한 값의 경우
        b_count[i] += 1
    except: # 처음 등장한 값의 경우
        b_count[i] = 1

print(b_count) # {'a': 2, 'b': 2, 'c': 1, 'd': 1}
반응형

이제 위의 딕셔너리 결과에서 2회(혹은 n회) 이상 등장했던 원소들만 골라내면 됩니다.

new_b = [] # 중복 원소만 넣을 리스트

for k, v in b_count.items():
    if v >= 2: # n회 이상 등장한 원소로도 변경 가능
        new_b.append(k)

print(new_b) # ['a', 'b']

 

 

리스트 내 중복 원소 제거

중복된 값을 제거하여 고유한 원소만 남기는 과정은

집합(set) 연산에서 중복을 골라내는 특징을 이용하면 아래 코드처럼 매우 간단하게 수행됩니다.

a = [1, 2, 3, 1, 2, 4, 5, 1]

a_unique = list(set(a))

print(a_unique) # [1, 2, 3, 4, 5]

 

또는, 중복 원소 추출 예제에서 사용했던 딕셔너리를 활용한 카운팅 방법도 적용이 가능합니다.

이 경우, 등장 횟수가 1인 원소들만 추출해주면 됩니다.

new_b = [] # 고유 원소만 넣을 리스트

for k, v in b_count.items():
	if v == 1: # 1회 등장한 값만 포함
		new_b.append(k)

print(new_b) # ['c', 'd']