본문 바로가기
Python/Data Structure

[Python]리스트 중복 문자열 삭제하기

by 전봇대파괴자 2021. 2. 2.

문자열로 구성된 리스트를 다루다 보면, 중복된 문자열만 삭제하고 싶은 경우가 생깁니다. 

예컨대 이런 리스트가 있다고 하겠습니다. 

 

Fruits = ['apple', 'lemon', 'melon', 'lemon', 'apple', 'grape', 'orange', 'orange', 'pear']

 

보다시피 'apple', 'lemon' 등 여러 문자열(단어)가 반복되는 것을 볼 수 있습니다. 

반복되는 문자열을 다 없애고 서로 다른 문자열들만 리스트 안에 남도록 하고 싶다! 고 한다면 어떻게 해야 할까요?

 

# 리스트
Fruits = ['apple', 'lemon', 'melon', 'lemon', 'apple', 'grape', 'orange', 'orange', 'pear']

# 리스트(list) → 집합(set) → 리스트(list)
Fruits = set(Fruits) # 집합은 중복을 허용하지 않으므로 중복 item 자동 제거
Fruits = list(Fruits) # 다시 리스트로 변환

 

집합(set)을 활용하면 간단히 중복을 제거할 수 있습니다. 

집합은 리스트와 비슷하지만 구성값들의 중복을 허용하지 않습니다. 그렇기 때문에 중복값들이 포함된 리스트를 집합으로 바꿔주면 자동적으로 중복값이 제거됩니다.

 

# 리스트 출력해보기
print(Fruits)

>> ['orange', 'grape', 'apple', 'pear', 'lemon', 'melon']

 

이런 중복값 제거는 데이터프레임에서도 활용할 수 있습니다. 

예를 들어, 이런 데이터프레임이 있다고 해보죠. 

 

Customer number Date Fruits
1 2021-01-31 apple
2 2021-01-31 lemon
3 2021-02-01 melon
4 2021-02-01 lemon
5 2021-02-01 apple
6 2021-02-01 grape
7 2021-02-02 orange
8 2021-02-02 orange
... ... ...

 

이 데이터는 과일가게에서 과일을 사간 손님들과 일자, 사간 과일들의 정보를 담고 있습니다. 

모든 과일가게가 같은 과일을 구비하고 있는 것은 아니죠. 

만약 이 과일가게에서 어떤 과일들을 판매하는지, 어떤 과일들은 판매하지 않는지를 알고 싶을 경우 어떻게 알아낼 수 있을까요? 

 

# df는 전체 데이터프레임을 의미합니다
Fruits_li = list(set(df['Fruits'])) # 열(column)에서 중복값을 제거해 리스트로 만든다

>> ['orange', 'grape', 'apple', 'pear', 'lemon', 'melon']

 

 

이처럼 데이터 양이 많을 때도 이 코드를 활용하면 간단히 중복값을 제거할 수 있습니다. 

value_counts를 통해 구하는 방법도 있지만, 이 방법은 실제 값들을 담은 리스트를 직접적으로 제공해주지는 않는다는 단점이 있습니다. 

 

도움이 되었기를 바랍니다.