일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 홈네트워크
- 공모주
- 코스피
- 파이썬
- 티스토리챌린지
- homebridge
- 힐스테이트 광교산
- SK텔레콤
- MQTT
- Home Assistant
- Espressif
- Python
- 애플
- 현대통신
- 국내주식
- 해외주식
- cluster
- RS-485
- 월패드
- Bestin
- 오블완
- esp32
- ConnectedHomeIP
- Apple
- 미국주식
- 나스닥
- 배당
- raspberry pi
- matter
- 매터
- Today
- Total
YOGYUI
Python - list 요소 뒤집기 (reverse list elements) 본문
Python 코딩할 때 자주 활용하는 자료구조 중 하나인 list의 요소들을 뒤집는 방법을 알아보자
(은근히 쓸데가 많다)
참고: 모든 코드는 python 3.x에서 작성되었다
1. 리스트 객체 자체를 뒤집기
list 객체의 reverse 메서드를 사용하면 된다
예를 위해 리스트 객체를 하나 생성한다
a = [1, 2, 3, 4, 5]
In [1]: print(a)
Out[1]: [1, 2, 3, 4, 5]
이제 뒤집어보자
a.reverse()
In [2]: print(a)
Out[2]: [5, 4, 3, 2, 1]
간단하게 요소를 뒤집을 수 있다
그런데 리스트 객체 자체가 바뀌는 것이기 때문에, 원본 리스트를 그대로 남겨두고자 하는 경우에는 적절한 구현 방식이 아니다 (나도 이 방식은 거의 쓰지 않는다)
2. 뒤집은 리스트 객체를 반환하기
2.1. reversed built-in 함수 이용하기
내장함수를 이용해서 이터레이터를 반환하는 구현방식이 있다
a = [1, 2, 3, 4, 5]
b = reversed(a)
In [3]: b
Out[3]: <list_reverseiterator object at 0x000001A668FB7A90>
In [4]: type(b)
Out[4]: <class 'list_reverseiterator'>
list_reverseiterator 객체가 반환되는데, 딱히 복잡하게 생각할 것 없이 list로 치환할 수 있다
c = list(b)
In [5]: print(c)
Out[5]: [5, 4, 3, 2, 1]
In [6]: print(a)
Out[6]: [1, 2, 3, 4, 5]
원본 리스트 객체가 유지된 것을 알 수 있다
이렇게 구현해도 상관없지만, pythonic하지 않을 뿐더러 코드가 지저분한 느낌이 든다
2.2. 리스트 슬라이싱 (slice list)
이 방법이 핵심이다
a = [1, 2, 3, 4, 5]
b = a[::-1]
In [7]: print(b)
Out[7]: [5, 4, 3, 2, 1]
In [8]: print(a)
Out[8]: [1, 2, 3, 4, 5]
::-1 로 한방에 해결된다
슬라이싱 방식은 str 문자열 객체에도 동일하게 적용할 수 있다
In [9]: "YOGYUI"[::-1]
Out[9]: 'IUYGOY'
간단하게 원리를 설명하면 slicing 시 콜론(:)을 두 개 사용하면 C/C++의 for 문과 유사하게 시작/끝/스텝을 지정하게 된다
a[start:end:step]
Python은 C/C++과는 다르게 음수 입력을 통해 iterable 객체의 가장 끝 요소부터 인덱싱할 수 있다
In [10]: print(a[-1], a[-2], a[-3], a[-4], a[-5])
Out[10]: 5 4 3 2 1
따라서 ::-1 구문을 굳이 for문으로 구현해보면 다음과 같다
def my_reverse(input: list):
output = list()
for i in range(1, len(input) + 1):
output.append(input[-i])
return output
(인덱싱/슬라이싱에 대한 자세한 설명은 꽤 길어질 수 있으니 기회가 되면 다른 포스트에서 다루도록 한다)
생각보다 쓸 데가 많으니 외워두고 요긴하게 사용하도록 하자
끝~!
'Software > Python' 카테고리의 다른 글
Python - str format 중괄호 (brace) 출력하기 (0) | 2021.08.25 |
---|---|
Python - 음의 정수를 16진수로 표현하기 (negative int to hex) (0) | 2021.08.24 |
Python - 윈도OS 환경 변수 변경하기 (Modify Environment Variables) (1) | 2021.08.17 |
PyQt5 - Connect pyqtSignal in For loop (lambda problem) (0) | 2021.07.20 |
PyQt5 - QTextEdit Tab Width 설정하기 (0) | 2021.07.15 |