[파이썬] 뒤집기: 'slicing' vs 'reversed()' vs 'reverse()'

2020. 7. 2. 23:10Python


Slicing X[::-1]

슬라이싱(Slicing)이 가능한 데이터 X의 자료형

  • X = 리스트
  • X = 튜플
  • X = 문자열
  • X != 딕셔너리 (딕셔너리는 인덱스 번호로 데이터에 접근하지 않고 key로 데이터에 접근하기 때문이다.)
a = [1, 2, 3]
ra = a[::-1]
print(f'original:: {a} | reversed:: {ra}')

# original:: [1, 2, 3] | reversed:: [3, 2, 1]

b = ('a', 'b', 'c')
rb = b[::-1]
print(f'original:: {b} | reversed:: {rb}')

# original:: ('a', 'b', 'c') | reversed:: ('c', 'b', 'a')

c = 'hello'
rc = c[::-1]
print(f'original:: {c} | reversed:: {rc}')

# original:: hello | reversed:: olleh

reverse 함수 X.reverse()

리스트(list) type에서 제공하는 함수

1) X는 reverse()가 적용되는 대상이 되는 오직 리스트 자료형이다.

  • X = 리스트
  • X != 튜플
  • X != 문자열
  • X != 딕셔너리

2) reverse()의 인자에는 아무것도 받지 않는다.

3) 반환되는 데이터는 없다 (None).
→ reverse 함수가 정상적으로 실행됐는지 확인하려면 원본 데이터 X를 출력해서 확인해야 한다.


reversed 함수 reversed(순서가 있는 데이터)

파이썬 내장함수이다. 즉, 리스트(list)나 문자열에서 제공하는 함수가 아니다.

1) reversed의 인자로 순서가 있는 데이터 자료형을 인자로 받는다
  • 리스트
  • 튜플
  • 문자열
  • 딕셔너리
2) 반환되는 데이터는 하나의 객체이다
인자 데이터 자료형과 상관없는 새로운 객체 생성
  • 인자가 리스트일 때, list_reverseiterator 객체
  • 인자가 튜플, 문자열일 때, reversed class인 객체

reversed()함수의 반환되는 자료형이 인자로 넣어준 데이터 자료형와 똑같은 자료형을 반환하는 줄 알아서 힘들었다. 인자로 넣어준 데이터 자료형이랑 똑같이 반환해주기 위해서는 다음과 같이 해주어야 한다.

인자 방법
리스트 myList list(reversd(myList))
튜플 myTuple tuple(reversd(myList))
문자열 myString ''.join(reversed(myString))
## 1. 리스트
i = reversed([1, 2, 3])
print(type(i))
# <class 'list_reverseiterator'>

iReversed = list(i)
print(iReversed)
# [3, 2, 1]


## 2. 튜플
j = reversed((1, 2, 3))
print(type(j))
# <class 'reversed'>

jReversed = tuple(j)
print(jReversed)
# (3, 2, 1)


## 3. 문자열
k = reversed("hello")
print(type(k))
# <class 'reversed'>

kReversed = ''.join(list(k))
print(kReversed)
# olleh