일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 소프트웨어
- I'm Sorry
- 버전관리
- 2
- 네트워크
- 컴퓨터공학
- 알고리즘
- 보안
- 데이터구조
- 웹개발
- 컴퓨터과학
- 파이썬
- 데이터베이스
- 프로그래밍언어
- 데이터과학
- 인공지능
- 사이버보안
- 머신러닝
- Yes
- 프로그래밍
- 데이터분석
- 네트워크보안
- 소프트웨어공학
- 빅데이터
- 딥러닝
- 클라우드컴퓨팅
- 자료구조
- 코딩
- 자바스크립트
- 컴퓨터비전
- Today
- Total
스택큐힙리스트
왜 슬라이싱할 때 문자열의 길이보다 큰 인덱스 번호를 사용해도 IndexError가 발생하지 않을까요? 본문
파이썬에서 문자열 길이보다 큰 인덱스 번호를 사용하면 IndexError가 발생합니다.
string = uphill
print(string[12])
그러나 문자열을 슬라이스하는 경우에는 문자열보다 큰 인덱스 번호를 사용해도 IndexError가 발생하지 않습니다.
string = uphill
print(string[0:12])
왜 그럴까요? 이것은 제가 생각하기에는 다소 암시적인 것으로 보입니다. 이 경우에도 IndexError가 발생할 것으로 기대하지만, 만약 관련된 것을 찾을 수 없다면 죄송합니다.
답변 1
나는 이 질문에 대한 잘 설명된 답을 이 글에서 찾았습니다:
http://blog.lerner.co.il/python-parentheses-primer/
참고: 다음 답변은 글에서 가져온 것이며, 제가 작성한 것이 아닙니다.
시퀀스의 범위를 벗어나는 단일 인덱스를 요청하면 IndexError 예외가 발생할 수 있습니다. 그러나 슬라이스는 이런 문제가 없습니다. 그들은 문자열의 시작 또는 끝에서 멈춥니다. ... 대괄호는 개별 인덱스와 슬라이스를 어떻게 구별합니까? 답변: 그렇지 않습니다. 두 경우 모두 getitem 메서드가 호출됩니다. 색인 매개변수에 어떤 종류의 값이 전달되었는지 확인하기 위해 getitem 메서드가 확인하는 것입니다.
하지만 기다려주세요: 정수 또는 문자열 (또는 심지어 튜플)을 대괄호에 전달하면 전달되는 유형을 알 수 있습니다. 슬라이스를 사용하면 메서드에 어떤 유형이 전달됩니까?
첫 번째 경우에는 예상대로 정수를 얻게 됩니다. 그러나 두 번째와 세 번째 경우에는 슬라이스 객체를 얻습니다. 우리는 원한다면 이를 수동으로 생성할 수 있습니다; slice는 bulitin 네임스페이스에 있으며 str, int, dict 등과 함께 즐겨찾기로 알려져 있습니다. 그리고 출력된 표현에서 볼 수 있듯이 slice를 range와 같은 방식으로 호출할 수 있습니다. 시작, 끝 및 단계 크기 인수가 있습니다.
답변 2
문자열 슬라이싱 시에 len(string)보다 큰 인덱스 번호를 사용할 때 IndexError가 발생하지 않는 이유에 대해 설명해 드리겠습니다.문자열은 파이썬에서 사용되는 데이터 타입 중 하나로, 여러 개의 문자들이 나열된 형태를 갖습니다. 이때 각 문자들은 인덱스 번호를 가지며, 인덱스는 0부터 시작하여 문자열의 길이(len(string))보다 1 작은 최대 숫자까지 할당됩니다.
슬라이싱은 문자열에서 원하는 범위의 문자들을 선택하는 작업을 의미합니다. 이때 사용되는 인덱스 번호들은 시작 인덱스와 끝 인덱스로 구성되며, 대괄호([]) 안에 넣어서 표현됩니다. 시작 인덱스부터 끝 인덱스까지의 문자들이 선택되며, 선택된 문자들은 새로운 문자열로 반환됩니다.
만약 슬라이싱 시에 사용하는 인덱스 번호가 문자열의 범위를 벗어나면 IndexError가 발생합니다. 하지만 인덱스 번호가 len(string)보다 큰 경우에는 IndexError가 발생하지 않습니다. 이는 파이썬에서 슬라이싱 작업을 처리하는 방식에 기인합니다. 파이썬은 인덱스 번호가 len(string)보다 큰 경우에는 그냥 문자열의 끝까지 선택하도록 처리하기 때문입니다. 즉, len(string) 이상의 인덱스 번호를 사용하는 경우에는 문자열의 길이에 해당하는 위치부터 끝까지의 문자들이 선택되는 것입니다. 이러한 처리 방식은 사용자 편의를 고려한 것으로, 인덱스 번호 오류를 예방해주는 역할을 합니다.
따라서 파이썬에서 문자열 슬라이싱 시에 인덱스 번호가 len(string)보다 크더라도 IndexError가 발생하지 않는 이유는 파이썬의 처리 방식 때문입니다. 이러한 특징을 이해하고 적절히 활용하는 것이 파이썬 프로그래밍에 있어서 중요한 요소 중 하나입니다.