[Python] 문자열을 거꾸로 뒤집는 reversed()와 [::-1] 비교

Erin Lee·2024년 2월 28일
0

코딩 테스트 문제를 풀다보면 문자열을 거꾸로 뒤집어야 하는 상황이 올 때가 있다.
주로 사용되는 방법이 reversed() 함수 또는 슬라이싱 기법 [::-1]이 있다.
두 방식의 원리를 알아보고 구현하고 비교해봤다.

1. reversed()

reversed() 함수는 이터러블(Iterable) 객체를 역순으로 순회하는 이터레이터(Iterator)를 반환한다.
원본 리스트를 변경하지 않고 역순으로 순회하면서 반환하는 원리이다.

array = [1, 2, 3, 4, 5]
print(array)
# reversed() 적용
array = reversed(array)
for element in array:
	print(element)

결과 >>

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

2. [::-1]

리스트를 처음부터 끝까지 전체를 간격만큼 -1 방향으로 잘라내는 방식이다.
원본 리스트를 변경하지 않고 뒤집힌 새로운 리스트를 만들어 반환한다.

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

for element in array[::-1]:
	print(element)

결과 >>

5
4
3
2
1

✔️ 가장 큰 차이점은 reversed()는 원본 리스트를 순회하면서 이터레이터를 반환하고,
슬라이싱 기법은 기존 리스트의 원소값을 모두 복사하여 뒤집힌 새로운 리스트를 생성하는 것이다.

❔ 그렇다면 이 두 방법 중 어느 방법이 더 좋을까?

reversed() 기법은 슬라이싱 기법과 다르게 복사하여 새로운 리스트를 만드는 것이 아니기 때문에 더 나은 성능을 발휘할 수 있다.
만약 데이터의 복사본을 저장하여 계속 활용하여야 한다면 그때는 슬라이싱 기법을 사용하는게 좋을 수 있다.

걸리는 시간에는 어떠한 차이가 있을 지 reversed()와 슬라이싱 기법을 사용하여 비교해봤다.

import time

array = [i for i in range(100000000)]

start = time.time()
array[::-1]
end = time.time()

print("[::-1] 소요 시간 :", end-start)

start = time.time()
reversed(array)
end = time.time()

print("reversed() 소요 시간 :", end-start)

결과 >>

[::-1] 소요 시간 : 0.6255691051483154
reversed() 소요 시간 : 0.0

압도적으로 reversed() 방식이 빠른 것을 알 수 있다.

대량의 데이터를 활용하는 경우거나 거꾸로 바꿔 활용할 일이 많은 경우 등 상황에 따라서 맞게 활용하면 되겠다.

profile
내가 설명할 수 있어야 비로소 내가 아는 것이다

0개의 댓글