파이썬 문자열 중복 제거와 순서유지

allnight5·2022년 11월 21일
0

python 함수

목록 보기
11/12

참조
https://m.blog.naver.com/dsz08082/222564464414

1.리스트 중복 제거 (순서 유지 X)

set()함수 문자열, 리스트가능
set() 함수를 사용해 list 자료형을 set 자료형으로 바꿨다가 다시 list 자료형으로 변환하는 방식이다 대신 순서가 랜덤이다

2.리스트 중복 제거 (순서 유지 O)

중복을 제거하면서 기존 리스트 순서를 유지하는 방법에는 여러 방법이 있으며 대표적인 방법은 4가지다.

2-1. 딕셔너리 사용

파이썬 3.7 이상 버전부터 딕셔너리 자료형은 키 값의 순서를 기억한다. fromkeys()를 사용해 딕셔너리를 편하게 생성할 수 있어 이를 사용한다. 사용 형식은 다음과 같다. value를 생략하면 키만 있고 키에 대응하는 값이 None인 딕셔너리가 만들어진다.

seq: 생성하려는 키 목록

dict.fromkeys(seq)

value: 생성할 딕셔너리의 값

dict.fromkeys(seq, value)

#입력 문자열 순서대로 들어온다.
data = list(dict.fromkeys(origin_data))

2-2. 정렬 함수, sorted() 사용

두 번째는 주어진 리스트를 set으로 바꾸고 sorted()로 정렬하는데 정렬 순서인 키 값으로 원소의 인덱스를 사용하는 방법이다. lambda 함수가 사용되었다.

sorted(set(origin_data), key=lambda x: origin_data.index(x))

2-3. For 반복문 구문 사용

new_data = []
for x in orgin_data:
    if x not in new_data:
        new_data.append(x)
new_data

2-4 리스트 컴프리헨션(list comprehension)을 이용한 코드다.

리스트 컴프리헨션을 이용하면 기존 for 반복문보다 코드 수도 줄이고 연산 시간을 대폭 줄일 수 있다. 다음 코드는 not in과 enumerate를 사용해 현재 반복 횟수와 값을 각 가져와서 연산을 처리한다.

new_data2 = [i for n, i in enumerate(origin_data) if i not in origin_data[:n]]

2-5. collections 라이브러리의 OrderedDict

OrderedDict 모듈을 사용하면 리스트 컴프리헨션보다도 더 빠르게 접근하여 중복을 제거한다. 사용방법은 다음과 같다.

from collections import OrderedDict
list(OrderedDict.fromkeys(origin_data)) 
profile
공부기록하기

0개의 댓글