Python - List Slicing

JS · 10 Oct 2020

List의 아이템들에 접근할 때 Slicing을 이용하는 방법이 있습니다.

슬라이싱에서 가져올 리스트의 범위를 지정하면, 해당하는 아이템들을 새로운 리스트로 만들어 리턴해줍니다.

예를 들어, 다음 코드는 리스트의 index 0에서 index 2까지의 아이템을 가져오는 코드입니다.

cities = ['Seoul', 'Tokyo', 'Beijing', 'Washington', 'Paris']
x = cities[0:3]
print(x)

Output:

['Seoul', 'Tokyo', 'Beijing']

슬라이싱은 아이템을 가져와 새로운 리스트를 만들 때 복사하기 때문에 기존 리스트가 변경되지 않습니다.

Syntax

Syntax는 다음과 같습니다.

Slicing[start:stop:step]

각각의 항목은 양수나 음수 모두 설정 가능합니다. 의미는 다음과 같습니다.

  • start : 슬라이싱을 시작할 Index를 의미합니다.
  • end : 슬라이싱이 종료될 Index를 의미합니다. 이 Index의 아이템은 슬라이싱 리스트에 포함되지 않습니다.
  • step : index의 간격을 설정합니다. 기본값은 1입니다.

특정 범위의 아이템 가져오기

[start:end]로 특정 범위의 아이템들을 가져올 수 있습니다. start는 포함되지만 end는 포함되지 않는 리스트를 리턴해 줍니다.

numbers = ['0', '1', '2', '3', '4']
x = numbers[0:3]
print(x)

Output:

['0', '1', '2']

start만 입력하면 리스트의 마지막까지 가져옵니다.

numbers = ['0', '1', '2', '3', '4']
x = numbers[2:]
print(x)

Output:

['2', '3', '4']

end만 입력하면 start는 기본적으로 0으로 설정됩니다.

numbers = ['0', '1', '2', '3', '4']
x = numbers[:2]
print(x)

Output:

['0', '1']

음수의 Index로 표현할 수도 있습니다.

numbers = ['0', '1', '2', '3', '4']
x = numbers[-3:-1]
print(x)

Output:

['2', '3']

Step

step이 양수이면, 오른쪽 방향으로 step 간격으로 아이템을 가져옵니다.

예를 들어, 다음은 step을 2로 설정한 예제입니다. 2개 간격으로 아이템을 가져왔습니다.

numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8']
x = numbers[0:8:2]
print(x)

Output:

['0', '2', '4', '6']

step을 명시하지 않으면 기본값으로 1로 설정됩니다.

다음 예제는 start index가 end index 보다 크지만, step을 -2로 설정하여 반대 방향으로 아이템을 가져옵니다.

numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8']
x = numbers[8:2:-2]
print(x)

Output:

['8', '6', '4']

순서 뒤집기

다음과 같이 step만 -1로 설정하면 아이템의 순서를 뒤집은 리스트를 만들 수 있습니다.

numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8']
x = numbers[::-1]
print(x)

Output:

['8', '7', '6', '5', '4', '3', '2', '1', '0']

슬라이싱으로 아이템 값 변경

다음과 같이 슬라이싱으로 범위를 지정하고, 새로운 리스트를 할당하면 원본 리스트의 데이터가 변경됩니다.

numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8']
numbers[1:3] = ['a', 'b']
print(numbers)

Output:

['0', 'a', 'b', '3', '4', '5', '6', '7', '8']
댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha