리스트 슬라이싱 : 리스트에 있는 여러개의 요소를 접근하기 위한 방법
슬라이싱은 리스트, 문자열, 튜플 등 연속적인 객체들에 범위를 지정해서 가져오는 기능입니다. 슬라이싱을 하면 객체를 가져오게 되므로 일부분을 복사해서 가져온다고 생각하면 됩니다.
1. 반복문을 사용하지 않고 5번째 회사까지 출력
Com = [ 'SamSung', 'Naver', 'Kakao', 'Line', 'Amore_pacific', 'Toss', 'Cj', 'Lg', 'Coupang', 'Nexon' ]
print(Com[0:5])
결과)
['SamSung', 'Naver', 'Kakao', 'Line', 'Amore_pacific']
파이썬의 리스트와 마찬가지로 첫번째 인덱스는 0으로 시작합니다.
그리고 뒷부분은 5로 지정해줬는데 -1을 한 인덱스까지만 출력하게됩니다. 그래서 마지막 회사는 인덱스 4인 'Amore_pacific'이 출력됩니다.
예제2)
Com = [ 'SamSung', 'Naver', 'Kakao', 'Line', 'Amore_pacific', 'Toss', 'Cj', 'Lg', 'Coupang', 'Nexon' ]
print(Com[5:9])
결과)
['Toss', 'Cj', 'Lg', 'Coupang']
i~j가 범위일때 시작은 정직하게 i번째 인덱스부터 마지막은 i-1번째 인덱스까지가 됩니다.
그래서 [5:9]일때 마지막이 'Nexon'이 아닌 'Coupang'이 됩니다.
3.
Com = [ 'SamSung', 'Naver', 'Kakao', 'Line', 'Amore_pacific', 'Toss', 'Cj', 'Lg', 'Coupang', 'Nexon' ]
print(Com[5:])
결과)
['Toss', 'Cj', 'Lg', 'Coupang', 'Nexon']
마지막 인덱스 값을 지정해 주지 않으면 마지막 인덱스로 구분합니다. 그래서 5번째 인덱스인 'Toss'부터 마지막 인덱스인 'Nexon'까지 출력됩니다.
4.
Com = [ 'SamSung', 'Naver', 'Kakao', 'Line', 'Amore_pacific', 'Toss', 'Cj', 'Lg', 'Coupang', 'Nexon' ]
print(Com[:4])
결과)
['SamSung', 'Naver', 'Kakao', 'Line']
시작 인덱스값을 지정해주지 않으면 처음 인덱스로 지정됩니다. [ ; 4] 이니 첫번째 'SamSung'부터 인덱스 3을 가지는 'Line'까지 출력됩니다.
5.
Com = [ 'SamSung', 'Naver', 'Kakao', 'Line', 'Amore_pacific', 'Toss', 'Cj', 'Lg', 'Coupang', 'Nexon' ]
print(Com[5:-1])
결과)
['Toss', 'Cj', 'Lg', 'Coupang']
끝 인덱스에 -1을 넣으면 마지막 원소에서 한칸 앞에 있는 원소를 의미합니다.
파이썬 리스트에서 인덱스 -1은 마지막 원소를 의미하는데 끝 인덱스는 j-1을 해주기 때문에 마지막에서 한칸 앞으로 가게됩니다. 그래서 'Nexon'이 아니라 'Coupang'이 나오게 됩니다.
Extended slices
arr[A:B:C]처럼 리스트 슬라이싱을 3개의 요소로 하는것을 의미합니다.
arr[A:B:C]에서 각 알파벳은 A는 시작, B는 마지막 그리고 C는 간격을 의미합니다.
arr[A:B:C]는 인덱스A부터 B-1까지 C의 간격으로 배열을 만들어라
A와 B가 공백이면 위의 arr[:]에서와 같이 처음과 끝을 의미합니다.
그리고 C가 공백이라면 한칸 간격을 의미합니다.
1.
Com = [ 'SamSung', 'Naver', 'Kakao', 'Line', 'Amore_pacific', 'Toss', 'Cj', 'Lg', 'Coupang', 'Nexon' ]
print(Com[::2])
결과)
['SamSung', 'Kakao', 'Amore_pacific', 'Cj', 'Coupang']
간격을 2로 설정해서 출력했습니다. 첫 요소인 'SamSung'을 시작으로 격자로 출력되는것이 보입니다.
2.
Com = [ 'SamSung', 'Naver', 'Kakao', 'Line', 'Amore_pacific', 'Toss', 'Cj', 'Lg', 'Coupang', 'Nexon' ]
print(Com[1::2])
결과)
['Naver', 'Line', 'Toss', 'Lg', 'Nexon']
[1::2]이므로 두번째 요소인 'Naver'부터 2칸씩 건너뛰어 'Nexon'을 출력합니다.
3.
arr[::-1]는 처음부터 끝까지 -1칸 간격으로(역순으로) 배열을 만들어라는 의미입니다.
arr[::1]이 처음부터 끝까지 1칸 간격으로 배열을 만드는 것이므로 음수를 붙여서 역순이 됩니다.
Com = [ 'SamSung', 'Naver', 'Kakao', 'Line', 'Amore_pacific', 'Toss', 'Cj', 'Lg', 'Coupang', 'Nexon' ]
print(Com[::-1])
결과)
['Nexon', 'Coupang', 'Lg', 'Cj', 'Toss', 'Amore_pacific', 'Line', 'Kakao', 'Naver', 'SamSung']
리스트의 역순으로 출력되었습니다. [::-1]은 자주 사용되니 암기해 두는것이 좋을것 같습니다.
print(sorted(Com, reverse=True))와는 결과가 다릅니다.
4.
Com = [ 'SamSung', 'Naver', 'Kakao', 'Line', 'Amore_pacific', 'Toss', 'Cj', 'Lg', 'Coupang', 'Nexon' ]
print(sorted(Com, reverse=True))
결과)
['Toss', 'SamSung', 'Nexon', 'Naver', 'Line', 'Lg', 'Kakao', 'Coupang', 'Cj', 'Amore_pacific']
sorted함수에 reverse를 사용한것은 사전의 역순으로 출력을 해주지만 arr[::-1]는 단순하게 현재 배열에서 정렬을 빼고 반대로만 출력을 해줍니다.
5.
Com = [ 'SamSung', 'Naver', 'Kakao', 'Line', 'Amore_pacific', 'Toss', 'Cj', 'Lg', 'Coupang', 'Nexon' ]
print(Com[::-2])
결과)
['Nexon', 'Lg', 'Toss', 'Line', 'Naver']
역순으로 2칸씩 출력이 됩니다.
6.
Com = [ 'SamSung', 'Naver', 'Kakao', 'Line', 'Amore_pacific', 'Toss', 'Cj', 'Lg', 'Coupang', 'Nexon' ]
print(Com[5::-1])
결과)
['Toss', 'Amore_pacific', 'Line', 'Kakao', 'Naver', 'SamSung']
5번 인덱스인 'Toss'부터 1칸씩 역순으로 출력됩니다.
7.
Com = [ 'SamSung', 'Naver', 'Kakao', 'Line', 'Amore_pacific', 'Toss', 'Cj', 'Lg', 'Coupang', 'Nexon' ]
print(Com[5::-2])
결과)
['Toss', 'Line', 'Naver']
5번 인덱스인 'Toss'부터 2칸씩 역순으로 출력됩니다. 마지막 'SamSung'은 건너뛰어서 출력되지 않고 'Naver'가 마지막으로 출력이 됩니다.
범위를 넘어선 슬라이싱일때
범위를 넘어가더라고 문자열이 있는 곳까지 출력이 가능합니다.
arr = '12345678'
print(arr[:10])
결과)
12345678
인덱스 오류가 나올 줄 알았는데 이런것도 가능하다니 파이썬 슬라이싱에 놀랐습니다.
'[Python]' 카테고리의 다른 글
[Python] Counter 모듈 사용법 (0) | 2022.07.05 |
---|---|
[Python] 파이썬 for-else (0) | 2022.07.05 |
[Python] 파이썬 sort(), sorted() 함수 사용법 (0) | 2022.07.03 |
[Python] 파이썬 replace함수 (0) | 2022.07.03 |
[Python] find함수와 index함수 (0) | 2022.07.02 |