# 인덱싱

문자에서 선택하고 싶은 한 장소의 정보를 찾아내는 작업을 인덱싱이라고 하고 그 장소를 인덱스라고 합니다.

예를 들어 Hello에서 첫 번째 문자를 출력하기 위해서 인덱스 0을 사용할 수 있습니다.

```py
a = "Hello"
print(a[0])
```

문자 다음에 나오는 `[]` 대괄호 안에 있는 숫자는 문자의 인덱스입니다.

일상생활에서 '처음'이라고 하면 보통 1을 생각합니다.

하지만 배열(문자열, 리스트 등)에서 첫 번째 인덱스를 출력하기 위해서 0을 사용합니다.

2번째는 1이고 3번째는 2입니다.

이 이유는 조금 뒤에 설명하겠습니다.

<iframe
  loading="lazy"
  title="Python IDLE Trinket"
  src="https://trinket.io/embed/python3/e1cdc9760f"
  height="400"
/>

:::note 5번째 줄의 코드에서 에러가 발생합니다.

그 이유는 인덱스는 0부터 시작하므로 5번째 인덱스는 4입니다.

5 인덱스는 존재하지 않기 때문에 에러가 발생합니다. :::

## 문자 인덱싱 (x ~ y 값)

문자에서 어떤 범위의 부분 문자를 구하기 위하여 다음과 같은 방법을 사용할 수 있습니다.

`[]` 안에 `:`를 사용하여 `:` 전에 나오는 인덱스를 포함하고 `:` 다음에 나오는 인덱스는 제외하고 출력이 됩니다.

만일 0이 없이 `''` 만 있어도 파이썬은 0이라고 인식합니다.

<iframe
  loading="lazy"
  title="Python IDLE Trinket"
  src="https://trinket.io/embed/python/4576e27caf"
  height="400"
/>

## 거꾸로 문자 뒤집기

문자를 거꾸로 바꾸기 위하여 인덱싱을 사용할 수도 있습니다.

옆의 예시에서 `::-1`은 `0:0:-1`을 생략한 코드입니다.

마지막 숫자는 스텝을 뜻합니다.

스텝은 문자 인덱싱을 셀때 단위입니다.

예를 들면, 단위를 2로 정하면 2 문자 중 하나씩만 출력됩니다.

스텝을 -1로 입력하면 거꾸로 바꿀 수 있습니다.

<iframe
  loading="lazy"
  title="Python IDLE Trinket"
  src="https://trinket.io/embed/python/c0331e8ab5"
  height="400"
/>

## 인덱싱 x를 사용하면 x-1인 이유

:::note

왜 저희는 목록의 첫 번째로 1을 사용하는데 코딩에서는 0부터 시작할까요?

그 이유는 '수학'입니다. 리스트는 한국어로 번역하면 '목록'입니다. 목록에는 '순서'가 있습니다.

예를 들어 1에서 시작하여 2씩 증가하는 리스트를 만들겠습니다.

1, 3, 5, 7 처음에 1에서 시작했습니다. 처음에는 1 + (2 \* 0)입니다.

1에서 2 증가했습니다. 이 순서의 공차(차이)는 2입니다. 두 번째 값은 1 + (2+1)입니다.

이렇게 계속하면 다음과 같은 공식이 나옵니다.

a = 1 + {2 \* (a-1)} 그래서 첫 번째 리스트 값을 0을 이용해서 찾는 이유는 공차의 값을 기준으로 0이 곱해졌기 때문입니다.

:::

import Quiz from '@site/src/components/Quiz';

<Quiz
  quiz={{
    quizTitle: '파이썬 퀴즈 5',
    quizSynopsis: '인덱싱에 대한 파이썬 퀴즈입니다.',
    nrOfQuestions: '4',
    questions: [
      {
        question: 'print("Python"[1])를 실행하면 무엇이 출력됩니까?',
        questionType: 'text',
        answerSelectionType: 'single',
        answers: ["'y'", "'P'", "'o'", "'on'"],
        correctAnswer: '1',
        explanation:
          '[1]은 문자열의 두 번째 문자를 의미합니다. 즉, 문자열의 첫 번째 문자는 0번째 문자입니다.',
        point: '30',
      },
      {
        question: 'print("Hello World"[0])를 실행하면 무엇이 출력됩니까?',
        questionType: 'text',
        answerSelectionType: 'single',
        answers: ["'d'", "'e'", "'H'", "'W'"],
        correctAnswer: '3',
        explanation:
          '[0]은 첫 번째 문자를 의미합니다. 즉, "Hello World"[0]은 "H"를 의미합니다.',
        point: '30',
      },
      {
        question: 'print("Dude!"[-1])를 실행하면 무엇이 출력됩니까?',
        questionType: 'text',
        answerSelectionType: 'single',
        answers: ["'D'", "'u'", "'e'", "'!'"],
        correctAnswer: '4',
        explanation:
          '[-1]은 문자열의 마지막 문자를 의미합니다. 즉, 문자열의 마지막 문자는 !입니다.',
        point: '30',
      },
      {
        question: 'print("Dude!"[::-1])를 실행하면 무엇이 출력됩니까?',
        questionType: 'text',
        answerSelectionType: 'single',
        answers: ["'!eduD'", "'Dude!'", "'!dude'", "'dude'"],
        correctAnswer: '1',
        explanation:
          '[::-1]은 문자열의 역순을 의미합니다. 즉, "Dude!"[::-1]은 "!eduD"를 의미합니다.',
        point: '10',
      },
    ],
  }}
/>
