HOWTO · Python
Python에서 `[:-1]`의 의미
Python의 `[:-1]` 슬라이스가 마지막 요소를 제외한 시퀀스를 반환하는 방법을 알아보세요.
이 페이지의 내용
Python에서 sequence[:-1]은 마지막 요소를 제외한 모든 요소를 포함하는 새 시퀀스를 반환합니다. 문자열과 리스트에서 동작하며 원래 시퀀스는 변경되지 않습니다. 이 식은 슬라이싱과 -1을 결합한 것으로, -1은 끝에서부터 인덱싱할 때 마지막 위치를 나타냅니다.
Python의 슬라이싱
Python은 슬라이스를 설명하는 동등한 두 가지 방법을 제공합니다. slice() 생성자와 인덱싱 구문입니다. 일반적인 형태는 sequence[start:stop:step]이며, 각 부분은 어디에서 시작할지, 어디에서 멈출지, 얼마나 전진할지를 선택합니다. start와 stop 경계는 위치를 나타내고, step은 방향과 간격을 제어합니다.
stop 위치는 제외됩니다. 인덱스 4에서 끝나는 슬라이스는 4 앞의 위치들을 포함하므로, sequence[1:4]는 인덱스 1, 2, 3을 선택합니다. 인덱스는 끝에서부터 셀 수도 있습니다. -1은 마지막 요소, -2는 그 앞의 요소를 가리킵니다. 생략된 경계는 명시적으로 -1을 쓰는 것과 다릅니다. 일반적인 양의 단계에서는 생략된 시작은 시퀀스의 처음에서 시작하고, 생략된 stop은 그 끝까지 계속됩니다. 기본값은 단계의 방향에 따라 달라집니다. 음의 단계에서는 순회가 오른쪽에서 왼쪽으로 이동합니다. 생략된 시작은 마지막 위치에서 시작하고, 생략된 stop은 첫 번째 위치를 지나 계속됩니다. 이 방향에 따른 동작 때문에 생략된 stop은 명시적으로 -1을 쓰는 것과 같지 않습니다.
생성자는 같은 부분들을 받습니다. slice(start, stop, step)입니다. 인덱싱 구문과 달리 생성자 인자를 비워 둘 수는 없습니다. 생략된 경계는 None으로 나타내세요. 예를 들어, slice(None, 5)는 생략된 시작과 5인 stop을 사용하며, 양의 단계에서는 sequence[:5]와 동등합니다. 인자가 하나인 경우, slice(5)는 stop을 5로 설정합니다. “인덱스 5에서 시작"이라는 뜻이 아닙니다. 이러한 형태는 슬라이스를 값으로 저장하거나 전달해야 할 때 유용합니다.
Python에서 [:-1]의 의미
sequence[:-1]에서는 시작이 생략되므로 슬라이스는 처음에서 시작합니다. stop은 -1이며 이는 마지막 요소를 나타내고, stop이 제외되므로 그 요소는 결과에 복사되지 않습니다. 예를 들어, 이를 "Python"에 적용하면 "Pytho"가 되고, ["red", "green", "blue"]에 적용하면 ["red", "green"]가 됩니다.
같은 식을 같은 결과 패턴으로 서로 다른 시퀀스 타입에 적용할 수 있습니다. 이 독립적인 예제는 짧은 문자열과 색상 이름 리스트를 사용한 뒤, 슬라이스된 각 값을 각자의 줄에 표시합니다. 입력값을 보면 어떤 마지막 항목이 생략되는지 쉽게 알 수 있고, 출력된 값은 원본 데이터가 프로그램에서 나중에 사용할 수 있도록 계속 남아 있음을 보여줍니다.
word = "Python"
colors = ["red", "green", "blue"]
print(word[:-1])
print(colors[:-1])
Pytho
['red', 'green']
슬라이싱은 원본 시퀀스를 변경하는 대신 결과를 만듭니다. 이 때문에 [:-1]은 마지막 문자나 항목이 없는 버전이 필요하지만 원래 값이 나중에 여전히 필요할 때 유용합니다. 빈 시퀀스에서도 동작하여 또 다른 빈 시퀀스를 반환합니다. 요소가 하나뿐인 시퀀스에서는 그 유일한 요소가 마지막 요소이므로 결과가 비어 있습니다. 같은 stop 경계 규칙이 두 결과 모두를 설명합니다.