리스트 자료형에 대해 알아보고, 리스트 인덱싱과 슬라이싱을 예제와 함께 살펴보겠습니다.
[ Contents ]
1. 리스트(List)
리스트(List): 여러 데이터들을 묶어서 목록화하는 자료형
데이터의 유형 상관없이, 한 곳에 모아서 저장할 수 있는 자료형입니다. C/C++/Java 등 기존 언어의 '배열'과 비슷하지만 매우 다릅니다. 일단 리스트는 인덱스로 접근 가능하지만, 여러 곳에 있는 데이터들을 묶어둔 '연결 리스트'입니다. 배열처럼 연달아서 공간을 할당하지 않습니다.
또한, 데이터 유형에도 구애받지 않습니다. 하나의 자료형만 고집해서 저장할 필요가 없습니다.
리스트 이름 = [ 항목1, 항목2, 항목3, ... ]
리스트 생성은 위 예제처럼, [ ] 대괄호 안에 항목을 ,(콤마)로 구분해서 나열합니다.
2. 리스트 슬라이싱
1) 리스트 인덱싱(indexing)
list[index]: 해당 index의 항목을 반환
n개의 항목을 가진 리스트는 0번부터 n-1번까지 인덱스가 항목에 부여됩니다. 위 예제에서는 0부터 2까지 있으며, 0번 항목인 'jangThang'이 출력되었습니다.
'음수 인덱싱'도 가능합니다. 음수는 반대로 끝에서부터 항목을 세서 인덱스를 부여합니다. -1은 끝에서 첫번째 항목을 뜻합니다.
2) 리스트 슬라이싱(slicing)
list[start : end : stride]: start번째 항목부터 end-1번째 항목까지 stride마다 반환
리스트의 원하는 부분만 잘라내서 사용할 수 있습니다. 이를 '리스트 슬라이싱'이라고 합니다.
start, end, stride 파라미터는 생략할 수 있습니다. start의 기본값은 0, end의 기본값은 n(리스트의 길이), stride의 기본값은 1입니다. 위 예제는 stride가 1(기본값)이고, 1부터 2까지의 항목을 슬라이싱했습니다.
3. 백견이 불여일행
리스트 슬라이싱은 예제 없이 익히기 어렵습니다. 아래 예제 코드를 보고, 결과가 어떻게 나올지 상상해보세요.
sample_list = [1, 2, 3, 4, 5]
print(sample_list[1:5])
sample_list = [1, 2, 3, 4, 5]
print(sample_list[1:])
[2, 3, 4, 5]
sample_list = [1, 2, 3, 4, 5]
print(sample_list[:3])
[1, 2, 3]
sample_list = [1, 2, 3, 4, 5]
print(sample_list[:])
[1, 2, 3, 4, 5]
# 기본값을 넣어보면 sample_list[0:5]와 같습니다.
sample_list = [1, 2, 3, 4, 5]
print(sample_list[::])
[1, 2, 3, 4, 5]
# 기본값을 넣어보면 sample_list[0:5:1]와 같습니다.
sample_list = [1, 2, 3, 4, 5]
print(sample_list[1:5:2])
[2, 4]
# sample_list[1:5] = [2, 3, 4, 5] 이고 여기서 stride 2마다 추출하면 [2, 4]가 됩니다.
sample_list = [1, 2, 3, 4, 5]
print(sample_list[::-1])
[5, 4, 3, 2, 1]
# stride가 음수이면, 거꾸로 리스트를 반환합니다.
sample_list = [1, 2, 3, 4, 5]
print(sample_list[1:-1:-1])
[]
# 음수 인덱스를 여러 개 사용하면 고장이 납니다.
원래대로라면, sample_list[1:-1] = [2, 3, 4]이므로 stride = -1을 적용하면 [4, 3, 2] 여야 합니다.
이를 따로 분리해서 슬라이싱해주면, 정상적으로 작동하는 걸 확인할 수 있습니다.
'PL (Programming Language) > Python' 카테고리의 다른 글
[Python] 리스트 연산 및 메서드 함수 (0) | 2022.04.11 |
---|---|
[Python] 리스트 생성 및 초기화 방법 (feat. 2차원 리스트 초기화) (0) | 2022.04.11 |
[Python] while 반복문과 break, continue 제어자 (0) | 2022.02.13 |
[Python] 조건문 if, elif 그리고 else문 (0) | 2022.02.13 |
[Python] 사용자로부터 여러 입력값 받기 input().split() [feat. 형변환] (0) | 2022.01.24 |
댓글