웹사이트 검색

Python 3에서 문자열을 인덱싱하고 슬라이스하는 방법


소개

Python 문자열 데이터 유형은 문자, 숫자, 공백 문자 또는 기호로 구성될 수 있는 하나 이상의 개별 문자로 구성된 시퀀스입니다. 문자열은 시퀀스이기 때문에 다른 시퀀스 기반 데이터 유형과 동일한 방식으로 인덱싱 및 슬라이싱을 통해 액세스할 수 있습니다.

이 자습서는 인덱싱을 통해 문자열에 액세스하고, 문자 시퀀스를 통해 문자열을 분할하고, 몇 가지 계산 및 문자 위치 방법을 살펴보는 과정을 안내합니다.

전제 조건

컴퓨터나 서버에 Python 3가 설치되어 있고 프로그래밍 환경이 설정되어 있어야 합니다. 프로그래밍 환경이 설정되지 않은 경우 운영 체제(Ubuntu, CentOS, Debian 등)에 적합한 서버의 프로그래밍 환경에 대한 설치 및 설정 가이드를 참조할 수 있습니다.

문자열이 인덱싱되는 방법

인덱스 번호에 해당하는 항목이 있는 목록 데이터 유형과 마찬가지로 문자열의 각 문자도 인덱스 번호 0부터 시작하여 인덱스 번호에 해당합니다.

문자열 Sammy Shark!의 경우 인덱스 분석은 다음과 같습니다.

S a m m y S h a r k !
0 1 2 3 4 5 6 7 8 9 10 11

보시다시피 첫 번째 S는 인덱스 0에서 시작하고 문자열은 인덱스 11에서 ! 기호로 끝납니다.

또한 SammyShark 사이의 공백 문자도 자체 인덱스 번호와 일치합니다. 이 경우 공백과 관련된 인덱스 번호는 5입니다.

느낌표(!)에도 연관된 색인 번호가 있습니다. *#$&.;?와 같은 다른 기호나 문장 부호도 문자이며 자체 인덱스 번호와 연결됩니다.

Python 문자열의 각 문자에는 해당 인덱스 번호가 있다는 사실을 통해 다른 순차 데이터 유형과 동일한 방식으로 문자열에 액세스하고 조작할 수 있습니다.

양수 색인 번호로 문자 액세스

색인 번호를 참조하여 문자열의 문자 중 하나를 분리할 수 있습니다. 색인 번호를 대괄호 안에 넣으면 됩니다. 문자열을 선언하고 인쇄하고 대괄호 안에 인덱스 번호를 호출해 보겠습니다.

정보: 이 자습서의 예제 코드를 따라하려면 python3 명령을 실행하여 로컬 시스템에서 Python 대화형 셸을 엽니다. 그런 다음 >>> 프롬프트 뒤에 추가하여 예제를 복사, 붙여넣기 또는 편집할 수 있습니다.

ss = "Sammy Shark!"
print(ss[4])
Output
y

문자열의 특정 인덱스 번호를 참조할 때 Python은 해당 위치에 있는 문자를 반환합니다. 문자 y는 문자열 ss = \Sammy Shark!\의 인덱스 번호 4에 있으므로 ss[4]를 인쇄하면 y를 출력으로 사용합니다.

색인 번호를 사용하면 문자열 내의 특정 문자에 액세스할 수 있습니다.

음수 색인 번호로 문자 액세스

긴 문자열이 있고 항목의 끝 부분을 정확히 지정하려는 경우 색인 번호 -1에서 시작하여 문자열 끝에서 역방향으로 계산할 수도 있습니다.

동일한 문자열 Sammy Shark!의 경우 음수 인덱스 분류는 다음과 같습니다.

S a m m y S h a r k !
-12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

음수 인덱스 번호를 사용하면 다음과 같이 -3 인덱스의 위치를 참조하여 r 문자를 출력할 수 있습니다.

print(ss[-3])
Output
r

음수 색인 번호를 사용하면 긴 문자열의 끝을 향해 단일 문자를 분리하는 데 유리할 수 있습니다.

문자열 슬라이싱

문자열에서 다양한 문자를 호출할 수도 있습니다. Shark라는 단어만 인쇄하고 싶다고 가정해 보겠습니다. 원본 문자열 내의 일련의 문자인 슬라이스를 생성하여 그렇게 할 수 있습니다. 슬라이스를 사용하면 [x:y] 콜론으로 구분된 인덱스 번호 범위를 생성하여 여러 문자 값을 호출할 수 있습니다.

print(ss[6:11])
Output
Shark

[6:11]에서와 같이 슬라이스를 구성할 때 첫 번째 인덱스 번호는 슬라이스가 시작되는 위치(포함)이고 두 번째 인덱스 번호는 슬라이스가 끝나는 위치(제외)입니다. 위의 예에서 범위는 문자열이 끝난 후 발생하는 인덱스 번호여야 합니다.

문자열을 슬라이싱할 때 기본적으로 다른 문자열 내에 존재하는 문자열인 하위 문자열을 생성합니다. ss[6:11]를 호출하면 Sammy Shark! 문자열 내에 존재하는 하위 문자열 Shark를 호출합니다.

문자열의 양쪽 끝을 포함하려면 string[n:n] 구문에서 숫자 중 하나를 생략할 수 있습니다. 예를 들어 문자열 ss의 첫 번째 단어인 "Sammy\를 인쇄하려면 다음과 같이 입력하면 됩니다.

print(ss[:5])
Output
Sammy

슬라이스 구문에서 콜론 앞의 인덱스 번호를 생략하고 하위 문자열의 끝을 나타내는 콜론 뒤의 인덱스 번호만 포함하여 이를 수행했습니다.

문자열 중간에서 시작하여 끝까지 인쇄하는 하위 문자열을 인쇄하려면 다음과 같이 콜론 앞에 색인 번호만 포함하면 됩니다.

print(ss[7:])
Output
hark!

콜론 앞에 인덱스 번호만 포함하고 구문에서 두 번째 인덱스 번호를 남겨두면 하위 문자열은 호출된 인덱스 번호의 문자에서 문자열의 끝까지 이동합니다.

음수 인덱스 번호를 사용하여 문자열을 슬라이스할 수도 있습니다. 이전에 살펴본 것처럼 문자열의 음수 인덱스 번호는 -1에서 시작하여 문자열의 시작 부분에 도달할 때까지 거기에서 카운트다운합니다. 음수 인덱스 번호를 사용하는 경우 문자열의 앞부분에 나타나는 낮은 번호부터 시작합니다.

두 개의 음수 인덱스 번호를 사용하여 ss 문자열을 슬라이스해 보겠습니다.

print(ss[-4:-1])
Output
ark

하위 문자열 "ark\는 문자열 "Sammy Shark!\에서 인쇄됩니다. 문자 "a\는 -4 색인 번호 위치에 있고 문자 "k\는 -1 색인 번호 위치 앞에 있기 때문입니다.

문자열을 자르는 동안 보폭 지정

문자열 슬라이싱은 두 개의 인덱스 번호 외에 세 번째 매개변수를 허용할 수 있습니다. 세 번째 매개변수는 문자열에서 첫 번째 문자를 검색한 후 앞으로 이동할 문자 수를 나타내는 보폭을 지정합니다. 지금까지 우리는 stride 매개변수를 생략했으며 Python은 기본적으로 stride 1을 사용하므로 두 인덱스 번호 사이의 모든 문자가 검색됩니다.

하위 문자열 "Shark\를 출력하는 위의 예를 검토해 보겠습니다.

print(ss[6:11])
Output
Shark

stride가 1인 세 번째 매개변수를 포함하여 동일한 결과를 얻을 수 있습니다.

print(ss[6:11:1])
Output
Shark

따라서 stride 1은 슬라이스의 두 인덱스 번호 사이의 모든 문자를 가져옵니다. stride 매개변수를 생략하면 Python은 기본적으로 1을 사용합니다.

대신 보폭을 늘리면 문자가 건너뛰는 것을 볼 수 있습니다.

print(ss[0:12:2])
Output
SmySak

Python 구문 ss[0:12:2]에서 마지막 매개변수로 보폭 2를 지정하면 다른 모든 문자를 건너뜁니다. 강조 표시된 문자를 검토해 보겠습니다.

Sammy Shark!

인덱스 번호 5의 공백 문자도 스트라이드 2로 지정되어 건너뜁니다.

stride 매개변수에 더 큰 숫자를 사용하면 훨씬 더 작은 하위 문자열을 갖게 됩니다.

print(ss[0:12:4])
Output
Sya

Python 구문 ss[0:12:4]에서 마지막 매개변수로 보폭 4를 지정하면 네 번째 문자마다만 인쇄됩니다. 다시 강조 표시된 문자를 살펴보겠습니다.

Sammy Shark!

이 예에서는 공백 문자도 건너뜁니다.

전체 문자열을 인쇄하고 있기 때문에 두 개의 색인 번호를 생략하고 구문 내에 두 개의 콜론을 유지하여 동일한 결과를 얻을 수 있습니다.

print(ss[::4])
Output
Sya

두 개의 인덱스 번호를 생략하고 콜론을 유지하면 범위 내에서 전체 문자열이 유지되며 stride에 대한 마지막 매개변수를 추가하면 건너뛸 문자 수가 지정됩니다.

또한 stride에 음수 값을 지정할 수 있습니다. stride를 -1로 설정하면 원래 문자열을 역순으로 인쇄하는 데 사용할 수 있습니다.

print(ss[::-1])
Output
!krahS ymmaS

지정된 매개변수가 없는 두 개의 콜론은 원래 문자열의 모든 문자를 포함하고, stride 1은 건너뛰지 않고 모든 문자를 포함하며, stride를 부정하면 문자 순서가 반대로 됩니다.

-2의 보폭으로 이 작업을 다시 수행해 보겠습니다.

print(ss[::-2])
Output
!rh ma

이 예 ss[::-2]에서는 매개변수에 색인 번호가 포함되지 않았기 때문에 원래 문자열 전체를 처리하고 음의 보폭을 통해 문자열을 뒤집습니다. 또한 -2의 보폭을 가지면 반전된 문자열의 다른 모든 문자를 건너뜁니다.

!krahS[whitespace]ymm 에스

이 예에서는 공백 문자가 인쇄됩니다.

Python 슬라이스 구문의 세 번째 매개변수를 지정하면 원래 문자열에서 가져오는 하위 문자열의 보폭을 나타냅니다.

계산 방법

문자열 내의 문자에 해당하는 관련 인덱스 번호에 대해 생각하는 동안 문자열을 계산하거나 인덱스 번호를 반환하는 일부 메서드를 살펴볼 가치가 있습니다. 이는 사용자 입력 양식 내에서 허용하려는 문자 수를 제한하거나 문자열을 비교하는 데 유용할 수 있습니다. 다른 순차 데이터 유형과 마찬가지로 문자열은 여러 가지 방법을 통해 계산할 수 있습니다.

먼저 문자열, 목록, 사전을 포함하여 순서가 있든 없든 시퀀스인 모든 데이터 유형의 길이를 가져올 수 있는 len() 메서드를 살펴보겠습니다.

문자열 ss의 길이를 출력해 봅시다:

print(len(ss))
Output
12

문자열 \Sammy Shark!의 길이 공백 문자와 느낌표 기호를 포함하여 12자입니다.

변수를 사용하는 대신 len() 메서드에 바로 문자열을 전달할 수도 있습니다.

print(len("Let's print the length of this string."))
Output
38

len() 메서드는 문자열 내의 총 문자 수를 계산합니다.

하나의 특정 문자 또는 일련의 문자가 문자열에 나타나는 횟수를 계산하려면 str.count() 메서드를 사용하면 됩니다. 문자열 ss = \Sammy Shark!\로 작업하고 문자 "a\가 나타나는 횟수를 세어 봅시다.

print(ss.count("a"))
Output
2

다른 문자를 검색할 수 있습니다.

print(ss.count("s"))
Output
0

문자 "S\가 문자열에 있지만 각 문자는 대소문자를 구분한다는 점을 기억하는 것이 중요합니다. 대소문자에 관계없이 문자열의 모든 문자를 검색하려면 를 사용할 수 있습니다. 문자열을 먼저 모두 소문자로 변환하는 str.lower() 메서드. "An Introduction to String Methods in Python 3.”에서 이 메서드에 대한 자세한 내용을 읽을 수 있습니다.

일련의 문자로 str.count()를 사용해 봅시다.

likes = "Sammy likes to swim in the ocean, likes to spin up servers, and likes to smile."
print(likes.count("likes"))
Output
3

문자열 likes에서 "likes\에 해당하는 문자 시퀀스는 원래 문자열에서 3번 발생합니다.

문자열에서 문자 또는 문자 시퀀스가 나타나는 위치를 찾을 수도 있습니다. str.find() 메서드로 이 작업을 수행할 수 있으며 인덱스 번호를 기반으로 문자의 위치를 반환합니다.

문자열 ss에서 첫 번째 "m\이 나타나는 위치를 확인할 수 있습니다.

print(ss.find("m"))
Ouput
2

첫 번째 문자 "m\은 문자열 "Sammy Shark!\의 인덱스 위치 2에서 발생합니다. 위의 문자열 ss의 인덱스 번호 위치를 검토할 수 있습니다.

문자열 likes에서 첫 번째 "likes\ 문자 시퀀스가 발생하는 위치를 확인합니다.

print(likes.find("likes"))
Ouput
6

문자 시퀀스 "likes\의 첫 번째 인스턴스는 시퀀스 likes의 문자 l이 위치한 인덱스 번호 위치 6에서 시작합니다.

"좋아요\의 두 번째 시퀀스가 시작되는 위치를 확인하려면 어떻게 해야 합니까? 특정 인덱스 번호에서 시작하는 str.find() 메서드에 두 번째 매개 변수를 전달하면 됩니다. 따라서 문자열의 시작 부분에서 시작하는 대신 인덱스 번호 9 이후부터 시작하겠습니다.

print(likes.find("likes", 9))
Output
34

인덱스 번호 9에서 시작하는 이 두 번째 예에서 문자 시퀀스 "likes\의 첫 번째 항목은 인덱스 번호 34에서 시작합니다.

또한 범위의 끝을 세 번째 매개변수로 지정할 수 있습니다. 슬라이싱과 마찬가지로 음수 인덱스 번호를 사용하여 거꾸로 계산하면 됩니다.

print(likes.find("likes", 40, -6))
Output
64

이 마지막 예는 인덱스 번호 40과 -6 사이에서 시퀀스 "likes\의 위치를 검색합니다. 입력된 마지막 매개변수가 음수이므로 원래 문자열의 끝에서 계산됩니다.

len(), str.count()str.find()의 문자열 메서드는 길이, 개수를 결정하는 데 사용할 수 있습니다. 문자 또는 문자 시퀀스, 문자열 내의 문자 또는 문자 시퀀스의 인덱스 위치.

결론

문자열의 특정 인덱스 번호 또는 문자열의 특정 조각을 호출할 수 있으면 이 데이터 유형으로 작업할 때 더 큰 유연성을 얻을 수 있습니다. 목록 및 튜플과 같은 문자열은 시퀀스 기반 데이터 유형이므로 인덱싱 및 슬라이싱을 통해 액세스할 수 있습니다.

문자열에 대해 계속 배우려면 문자열 메서드에 대해 자세히 읽을 수 있습니다.