19.4 리스트의 인덱스 활용하기
이번에는 인덱스로 범위를 지정하여 리스트의 일부만 가져와보겠습니다.
- 리스트[시작인덱스:끝인덱스]
>>>a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90] >>> a[0:4] [0, 10, 20, 30] >>> a[0:10] [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
[ ] 안에 시작 인덱스와 끝 인덱스를 지정하면 해당 범위의 리스트를 가져올 수 있습니다. 이렇게 가져온 리스트는 리스트의 일부를 잘라왔다고 해서 슬라이스(slice)라고 부릅니다. 여기서 주의할 점이 있는데 끝 인덱스는 가져오려는 인덱스보다 1을 더 크게 지정해야 합니다. 따라서 요소가 10개 들어있는 리스트를 처음부터 끝까지 가져오려면 [0:9]가 아닌 [0:10]이어야 합니다(끝 인덱스는 리스트의 범위를 벗어난 인덱스를 지정할 수 있습니다).
다음과 같이 실행해보면 쉽게 이해할 수 있습니다. a[1:1]처럼 시작 인덱스와 끝 인덱스를 같은 숫자로 지정하면 아무것도 가져오지 않습니다. a[1:2]처럼 끝 인덱스를 1이 더 크게 지정해야 요소 하나를 가져옵니다.
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90] >>> a[1:1] [] >>> a[1:2] [10]
그럼 이번에는 리스트의 중간 부분을 가져와 보겠습니다.
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90] >>> a[4:7] [40, 50, 60] >>> a[4:-1] [40, 50, 60, 70, 80]
물론 a[4:-1]과 같이 음수를 지정할 수도 있습니다. -1은 뒤에서 첫 번째 요소를 뜻하는데 끝 인덱스는 가져오려는 인덱스보다 1을 더 크게 지정한다고 했으므로 실제로는 뒤에서 두 번째(-2) 요소인 80까지만 가져옵니다(음수는 숫자가 작을 수록 큰 수입니다. 그래서 -1은 -2보다 1이 더 큽니다).
이번에는 인덱스를 생략하는 방법을 사용해보겠습니다. 인덱스를 생략하는 방법은 리스트의 길이를 몰라도 되기 때문에 자주 쓰이는 방식입니다. 주로 리스트의 마지막 일부분만 출력할 때 사용합니다.
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90] >>> a[:7] [0, 10, 20, 30, 40, 50, 60] >>> a[7:] [70, 80, 90] >>> a[:] [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a[:7]과 같이 시작 인덱스를 생략하면 리스트의 처음부터 끝 인덱스 직전까지 가져오고, a[7:]과 같이 끝 인덱스를 생략하면 시작 인덱스부터 리스트의 마지막까지 가져옵니다. 또는, a[:]와 같이 시작 인덱스와 끝 인덱스를 모두 생략하면 전체 리스트를 가져올 수도 있습니다.
이번에는 len을 응용하여 전체 리스트를 가져와보겠습니다.
>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90] >>> a[0:len(a)] [0, 10, 20, 30, 40, 50, 60, 70, 80, 90] >>> a[:len(a)] [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
a의 요소는 10개입니다. 따라서 len(a)는 10이고, a[0:10]과 같습니다. 여기서 끝 인덱스는 가져오려는 인덱스보다 1을 더 크게 지정한다고 했으므로 len(a)에서 1을 빼지 않아야 합니다. 즉, 길이가 10인 리스트는 [0:10]이어야 전체 문자열을 가져옵니다.