파이썬 숫자 몇 번째 자리까지 추출

Unit 22. 문자열 응용하기

지금까지 리스트 사용 방법을 알아보았습니다. 리스트는 요소 여러 개가 모여 있었죠? 마찬가지로 문자열도 문자가 여러 개 모여 있는 상태라 리스트와 비슷한 점이 많습니다.

이번에는 문자열을 인덱스로 접근하는 방법과 문자열 서식, 문자열 메서드에 대해 알아보겠습니다.

문자열은 문자들이 일렬로 모여있는 상태입니다. 그래서 문자열(string)이라고 부릅니다. 문자열은 리스트처럼 인덱스로 접근하여 문자 하나를 가져올 수 있습니다.

  • 문자열[인덱스]

>>> hello = 'Hello, world!'
>>> hello[0]    # 첫 번째(인덱스 0) 문자 출력
'H'
>>> hello[4]    # 다섯 번째(인덱스 4) 문자 출력
'o'

문자열이 들어있는 변수에 [ ](대괄호)를 붙인 뒤 인덱스를 지정하면 해당 문자를 가져올 수 있습니다. 물론 리스트와 마찬가지로 문자열도 인덱스가 0부터 시작합니다. 따라서 문자열의 첫 번째 문자는 인덱스가 0입니다.

이번에는 문자열의 인덱스에 음수를 지정해보겠습니다.

>>> hello = 'Hello, world!'
>>> hello[-1]    # 마지막(인덱스 -1) 문자 출력(뒤에서 첫 번째)
'!'
>>> hello[-2]    # 마지막의 바로 앞(인덱스 -2) 문자 출력(뒤에서 두 번째)
'd'

hello[-1]와 같이 인덱스를 음수로 지정하면 문자열의 뒤에서부터 접근합니다. 즉, -1은 'Hello, world!'의 뒤에서 첫 번째 문자이므로 !, -2는 뒤에서 두 번째 문자이므로 d가 나옵니다(참고로 문자열을 묶은 따옴표는 문자열에 포함되지 않으므로 인덱스로 접근할 수 없습니다).

그럼 조금 응용해서 인덱스에 len을 조합해보겠습니다.

>>> hello = 'Hello, world!'
>>> hello[len(hello) - 1]    # 마지막(인덱스 12) 문자 출력
'!'

마지막 문자 !가 나왔습니다. 여기서 문자열의 인덱스는 0부터 시작하므로 len(hello)에서 1을 빼주어야 합니다. 즉, hello에 저장된 'Hello, world!' 문자열의 길이는 13인데 인덱스는 0부터 시작하므로 1을 빼주어야 마지막 문자가 나옵니다('Hello, world!'의 인덱스는 0부터 12까지).

지금까지 알아본 'Hello, world!' 문자열의 인덱스를 그림으로 표현하면 이런 모양이 됩니다.

그림 22-1 문자열의 인덱스
파이썬 숫자 몇 번째 자리까지 추출

물론 문자열을 인덱스로 접근할 때는 범위를 벗어나면 안됩니다. 문자열의 길이가 13이면 hello[13]은 인덱스의 범위를 벗어났으므로 에러가 발생합니다.

>>> hello = 'Hello, world!'
>>> hello[13]
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    hello[13]
IndexError: string index out of range

그리고 또 한가지 중요한 점이 있습니다. 문자열은 인덱스를 지정하여 문자를 가져올 수는 있지만 =로 문자를 할당할 수는 없습니다.

>>> hello[0] = 'a'
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    hello[0] = 'a'
TypeError: 'str' object does not support item assignment

따라서 문자열은 내용을 변경하는 방법이나 메서드를 제공하지 않습니다.

#1. 리스트에서 요소를 추출하는 방법

일반적으로 리스트에서 요소를 추출하려면 인덱스 번호를 활용한다. 예를 들어 a_list=['one','two','three','four','five']라는 리스트가 있을 때 a_list[0]과 같이 리스트 명을 쓰고 [ ] 괄호 안에 인덱스 번호를 적어 print(a_list[0])을 실행하면 해당 인덱스 번호에 해당하는 'one'이라는 원소가 출력이 된다. 참고로 파이썬에서 리스트의 인덱스 번호는 0부터 시작한다.

슬라이싱이라는 기법으로 몇번째부터 몇번째까지의 원소를 출력할 수도 있다. a_list[0:2]와 같이 인덱스 번호 대신 "0 콜론 2"를 [ ] 괄호 안에 입력할 경우, 0번째부터 2번째 전까지의 원소들을 출력해 준다. 즉 'one', 'two'가 출력이 된다.

#2. 리스트에서 홀수번째 혹은 짝수번째 요소만 추출하는 방법은 없을까?

그렇다면, 홀수번째 혹은 짝수번째 요소만 추출하는 방법은 없을까? 매번 순서대로만 요소를 추출하지 않기 때문이다. 이런 경우에는 슬라이싱을 할 때 [시작 인덱스값 :: 인덱스 간격값]을 설정해서 리스트를 슬라이싱하는 방법을 사용하면 된다.

아래와 같이 a_list[0::2]의 의미는 a_list의 0번째 인덱스부터 2의 간격의 인덱스들의 요소들을 추출하라는 의미이다. 즉, 이 방법을 통해 0, 2, 4 ... 인덱스들의 요소들을 출력할 수 있다. 

이에 따라 리스트의 홀수번째 요소를 추출하고 싶은 경우, 리스트[1::2]를 하면 되고, 짝수번째 요소를 추출하고 싶은 경우, 리스트[0::2]를 하면 되는 것이다.

파이썬 숫자 몇 번째 자리까지 추출
파이썬 홀수번째, 짝수번째 요소만 추출하기

이를 응용해서 0번째 원소로부터 3의 간격으로 원소를 추출하고 싶은 경우, 4의 간격으로 원소를 추출하고 싶은 경우 각각 리스트[0::3], [0::4]를 하면 된다. 몇번째 원소부터 시작할 것인지, 몇의 간격으로 원소를 추출할 것인지 값을 정해서 넣기만 하면 리스트에서 원소를 추출할 때 다양하게 활용할 수 있다.

#3. 숫자 원소인 경우, 처음부터 홀수 리스트 혹은 짝수 리스트를 만들 수 있다.

숫자 원소인 경우라면 처음부터 홀수 리스트, 짝수 리스트를 만드는 방법도 있다. list와 range 함수를 사용하면 간단하게 리스트를 만들 수 있다. list(range(처음시작할 원소값, 끝날 원소값+1, 원소들 사이의 간격값))으로 정의할 수 있다. 아래 코드를 보면 좀 더 쉽게 이해할 수 있다.

파이썬 숫자 몇 번째 자리까지 추출
list, range함수로 간격이 일정한 리스트 만들기

0부터 9까지 원소를 구하는데 그 간격을 1로 하는 경우 list(range(0,10,1))로 코드를 작성하면 되고, 위와 같이 출력 결과를 확인할 수 있다. 여기서 주의할 점은 파라미터를 입력할 때 원하는 원소의 끝값 더하기 1을 해주어야 한다는 점이다. 따라서 입력하는 파라미터가 9가 아닌 10이 입력되어야 0~9까지 원소가 들어간 리스트를 만들 수가 있다.

그 밖에 원소 간격을 2, 3, 4 등 여러가지 값을 넣어서 다양한 간격의 리스트를 만드는데 활용할 수 있다.

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."