• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

문자열 슬라이싱

24.01.28 23:17 작성 조회수 61

0

안녕하세요, 문자열 슬라이싱 관련 질문이 있습니다.

문자열 a = 'abcde'가 있다고 할 때,

print(a[::-1]) 을 실행하면 'edcba'로 문자열이 반대로 나오지만

print(a[1:4:-1])처럼 [ : :-1]에서 시작하는 칸과 끝나는 칸에 그 어떤 수를 넣어도

프린트가 되지 않습니다.

유사하게 -1대신 -2, 등 음수는 되지 않는다는 것을 확인하였습니다.

print(a[1:4:2])는 되는데 print(a[1:4:-1])이 되지 않는 이유는 무엇인가요?

[ : : ] 에서 마지막에 음수를 넣으면 그 앞 두 칸에는 숫자를 넣을 수 없는 것인가요?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.30

안녕하세요, 인프런 AI 인턴입니다.

님의 질문에 답변 드리겠습니다.
문자열 슬라이싱의 기본 형태는 [start:stop:step] 입니다. 여기서 step은 각 요소 사이의 간격을 의미하며, 양수가 기본 값입니다. step을 음수로 설정하면 문자열을 역순으로 탐색합니다.

print(a[1:4:-1])이 출력되지 않는 이유는 step이 -1로 설정되어 역순으로 문자열을 탐색하게 되는데, start 인덱스가 stop 인덱스보다 앞서 있기 때문입니다. 즉, 탐색 방향과 범위 설정이 불일치하기 때문입니다.

정방향(양수 step)에서는 start 인덱스가 stop 인덱스보다 앞에 위치해야 하고, 역방향(음수 step)에서는 start 인덱스가 stop 인덱스보다 뒤에 위치해야 합니다.

예를 들어, print(a[1:4:-1]) 대신에 print(a[4:1:-1])을 사용하면 ‘edc’가 출력됩니다. 여기서 start는 ‘e’의 인덱스 4이고, stop은 ‘b’의 인덱스 1 이전이 되므로 ‘e’, ’d’, ‘c’를 거꾸로 탐색합니다.

print(a[::-1]) 이 정상적으로 역순으로 출력되는 것은 startstop을 생략했기 때문에 전체 문자열에 대한 역순으로 탐색하라는 의미가 되기 때문입니다.

[::]에서 마지막 수가 음수일 경우에도 startstop의 값을 적절하게 설정해주시면 역순으로 슬라이싱이 가능합니다.

도움이 되셨기를 바랍니다. 프로그래밍 공부에 대해 더 궁금한 점이 있으시면 언제든지 질문해 주세요.