개발 꿀팁/PYTHON

Python-- 문자열입니다

Jammie 2023. 1. 11. 12:03
반응형

문자열 유형은 Python에서 매우 중요한 유형으로 일반적으로 따옴표 중간에 문자를 추가하여 표현하며 다른 언어와 달리 Python의 큰따옴표('')와 작은따옴표('')는 구별할 수 없습니다.문자열을 나타낼 수 있습니다

생성, 할당 및 접근합니다
1. 두 가지 방법으로 만듭니다.
(1) 직접 값을 지정합니다

s = "abcdef"

(2) str() 함수를 통해요

str() 함수의 역할은 들어오는 매개변수를 통해 string형 개체를 생성하는 것과 동일하며, 이 들어오는 매개변수는 정형, 부동 소수점 유형 또는 목록, 메타그룹, 사전 등이 될 수 있습니다

s = str(21) # >>> "21"
s = str(12.3) # >>> "12.3"
s = str([1, 2, 3]) # >>> "[1, 2, 3]"

주의할 점은, "들어오는 것은 무엇이고, 얻는 것은 무엇인가" 예를 들어 우리가 목록을 전송하면, 얻어진 문자열의 첫 번째 문자는 목록의 첫 번째 요소가 아니라, "["이며, 같은 이치로도 문자열의 일부로 간주됩니다.

2. 문자열에 액세스합니다
(1) 단일 문자에 접근합니다

s = "1234567"
print(s[1]) # >>> "2"
print(s[-1]) # >>> "7"
print(s[-7]) # >>> "1"

문자열도 당연히 시퀀스이므로 각 요소(즉, 각 문자)는 인덱스에 해당하며 인덱스의 디자인은 다른 언어와 마찬가지로 0부터 시작됩니다.

또한 파이썬은 마지막 요소의 인덱스를 -1, 끝에서 두 번째 요소의 인덱스를 -2로 만드는 '마이너스 인덱스'를 제공하여 첫 번째 요소의 인덱스가 -n(단, n은 시퀀스의 길이)임을 유추합니다.

(2) 슬라이스에 액세스합니다

s = "1234567"
print(s[1:4]) # >>> "234"

슬라이스는 파이썬에서 매우 독특한 문법이며, 물론 슬라이스가 적용되는 대상은 시퀀스(문자열, 목록, 메타그룹)로 시퀀스의 일부를 표현하는 데 매우 편리합니다.슬라이스에는 세 가지 매개변수 제어가 있으며 그의 형태는 다음과 같이 나타낼 수 있습니다

[begin: end: step]

가운데는 다음과 같이 구분되며, begin은 얻을 수 있는 시퀀스의 시작 위치를 나타내며 이 위치를 포함하고 end는 얻을 수 있는 시퀀스의 끝 위치를 나타내지만 이 위치의 요소를 포함할 수 없습니다.예:

s = "1234567"
s1 = s[2:5] # >> s에서 두 번째 자리부터 네 번째 자리까지를 따온 수, 즉 '345'입니다.

begin 및 end에 대한 해당 매개변수를 명시적으로 제공하지 않으면 begin은 기본적으로 0으로 간주되고 end는 다음과 같은 n(시퀀스 길이)으로 기본 설정됩니다

s = "1234567"
s1 = s[:5] # >>> s1 = "12345"
s2 = s[2:] # >>> s2 = "34567"
s3 = s[:] # >> 전체 s를 복사했습니다

슬라이스의 마지막 매개변수 step은 다음과 같은 '단계 길이'를 나타냅니다

s = "1234567"
s1 = s[1:6:2] # >> 1번 위치에서 시작하여 5번 위치에서 끝날 때까지 2보씩 '점프'하면 '246'을 받습니다.

원소를 취했을 때 뒤로 '점프'하는 걸음 수를 step이라고 이해하면 되는데, 예를 들어 위의 예는 두 걸음 점프한 것입니다.그러나 step이라는 매개변수는 반드시 주어져야 하는 것은 아니며 기본값은 1이며 기본값 1을 사용할 때 step 이전의 것도 특별한 요구 사항이 없으면 생략할 수 있습니다.

(3) 음절편입니다.

더 특별한 슬라이스 사용 방법이 있는데, 그것은 '마이너스 슬라이스'입니다. 일반적으로 step을 마이너스로 만드는 슬라이스입니다. 위에서 파이썬이 '마이너스 인덱스'를 제공한다고 말했기 때문에, 같은 이치에 따르면, 마이너스 슬라이스는 자연스럽게 뒤에서 시작하여 매 번 해당 단계를 앞으로 건너뛰는 것입니다. 예를 들어

s = "1234567"
print(s[6:1:-1]) # >> 6,5,4,3,2 위치의 요소를 차례로 취하면 "76543"이 됩니다.
print(s[-2:-4:-1]) # >> -2, -3 위치의 요소를 차례로 취하면 "65"가 됩니다

포지티브 섹션이든 네거티브 섹션이든 Begin과 end는 모두 '왼쪽 닫힘 및 오른쪽 열림' 원칙을 충족합니다.양성 슬라이스는 왼쪽에서 오른쪽으로(또는 후방으로) 반면 음성 슬라이스는 반대 방향입니다.

양성 슬라이스와 마찬가지로 step의 값은 물론 -1이 아닐 수도 있고 다른 음의 정수를 취할 수도 있습니다

s = "1234567"
print(s[6:1:-2]) # >> 6,4,2 위치의 요소를 차례로 취하면 "753" 입니다

양성 및 음성 슬라이스에 관계없이 begin 또는 end가 시퀀스의 범위를 벗어나면 이상을 일으키지 않는다는 점에 유의해야 합니다

a = "1234"
print(a[8:]) # >>> ""
print(a[0:8]) # >>> "1234"

양 절편에서 begin > end이고 begin이 end와 같은 번호이거나 음 절편에서 begin < end이고 begin이 end와 같은 번호일 경우 빈 시퀀스를 반환합니다

a = "1234567"
print(a[3:1:1]) # >>> ""
print(a[1:3:-1]) # >>> ""

그러나 begin이 end와 다른 번호를 갖는 경우 먼저 음의 인덱스를 해당 양의 인덱스로 변환한 다음 슬라이스를 구현합니다

a = "1234567"
print(a[-2:0:-1]) # >> a[5:0:-1]로 변환합니다.
print(a[2:-1]) # >> a[2:6]로 변환합니다.

불변성입니다
나는 이전에 정형, 문자열 등과 같이 이러한 유형의 데이터는 변경할 수 없다고 말했습니다(자세한 내용은 내 블로그: Python-Memory Management 참조). 즉, 이러한 유형의 데이터에 메모리가 할당되면 변경할 수 없습니다.예를 들어, 다음을 수행하면 이상이 발생합니다.

s = "1234567"
s[0] = "e"

하지만 현실적으로 우리가 문자열 자체의 내용을 바꿔야 하는 경우가 많은 것은 사실입니다.그러면 Python에서 우리가 일반적으로 사용하는 방법은 다음과 같은 string형 개체를 다시 만드는 것입니다

s = "1234567"
s = s[0:3] + "Python" # >>> s = "123Python"

결과는 s를 변경한 것처럼 보이지만 실제로는 이전 s의 슬라이스 s[0:3]와 문자열 'Python'으로 연결된 새로운 문자열을 재구성하고 s라는 이름에 의해 참조되었습니다.

마찬가지로, 우리는 물론 다음과 같은 문자열의 특정 요소를 제거할 수 있습니다

s = "1234567"
s = s[0:3] + s[4:] # >> s = "123567" 삭제 4

사실, 문자열 유형의 개체를 새로 만들었습니다.

문자열 연산자입니다
1. 멤버요
우리는 연산자 in과 not in을 사용하여 한 문자 또는 한 문자열이 다른 문자열에 있는지 여부를 결정합니다

s = "abcdef"
print("ef" in s) # >>> True
print("ac" in s) # >>> False
print("d" not in s) # >>> False

2. 연결하세요
두 문자열의 연결을 +로 나타내는데, 사실 앞에서 이미 이런 예를 본 적이 있습니다

s1 = "I wrote"
s2 = "Python"
print(s1 + " " + s2) # >>> "I wrote Python"

3. 반복합니다

s = "123"
print(s * 3) # >>> "123123123"

* 표현은 사실 수학적으로 같은 뜻이에요, 여러 개를 더하면.

4. 비교합니다
문자열 간의 비교는 두 문자열 간의 첫 번째 다른 문자에 해당하는 ascii 코드의 크기를 기반으로 합니다

s1 = "abcde"
s2 = "abce"
print(s1 > s2) # >>> False

두 문자열의 앞부분이 같을 때, 긴 문자열을 기준으로 합니다

s1 = "abcd"
s2 = "abc"
print(s1 > s2) # >>> True

문자열의 내장 함수입니다
1. 문자열 길이입니다
문자열의 길이를 len(str) 형식으로 찾습니다

print(len("1234567")) # >>> 7

2. 문자열의 최대값과 최소값입니다
사실 대응하는 ascii는 가장 크고 작은 문자를 인코딩합니다

print(max("abcd")) # >>> "d"
print(min("1234")) # >>> "1"

3. enumerate and zip
문자열을 매개 변수로 enumerate() 및 zip() 함수에 전달하여 해당 enumerate 유형 개체와 zip 유형 개체를 생성한 다음 루프를 통해 이러한 개체를 원하는 대로 출력합니다.예를 들어 다음과 같습니다.

enum_obj = enumerate("abcd") # >> enumerate 형식의 개체를 새로 만들었습니다
for index, ele in enum_obj:
print(index, ele) # >> 0 "a", 1 "b", 2 "c", 3 "d" 를 차례로 출력합니다.

for i in zip("abcd", "1234"):
print(i) # >> 순서대로 출력:("a", "0", "b", "1", "c", "2", "d", "3")

이러한 함수는 우리에게 데이터를 처리하는 보다 편리한 방법을 제공할 수 있습니다.

4. 문자열 찾기입니다
find()와 index() 함수는 앞서 말한 멤버 연산자를 사용하여 문자열이 다른 문자열에 있는지 여부를 판단할 수 있습니다.

s = "Python"
print(s.find("Py")) # >>> 0
print(s.find("hy")) # >>> -1

find() 함수의 기능은 일치하는 부분이 보이면 처음의 그 위치로 되돌리고, 보이지 않으면 -1로 되돌리는 것입니다. 물론 find() 함수에서는 찾는 시작과 끝의 위치를 설정할 수도 있습니다.그러나 문자열에 내장된 함수가 너무 많고 많은 함수의 매개변수 설정도 매우 상세하기 때문에 저는 단지 '벽돌을 던져 옥을 끌어당기기'만 할 뿐 하나하나 열거하지 않습니다.

index() 함수는 유사한 기능을 구현하지만, 찾지 못하면 이상을 유발합니다.따라서 index() 함수를 사용하려면 구성원 연산자를 사용하여 미리 판단문을 추가하고, 만약 그렇다면 index()를 사용하여 일치하는 필드의 시작 위치를 반환하는 것이 가장 좋습니다

s = "Python"
print(s.index("yth")) # >>> 1
print(s.index("hy") # >> 이상을 유발합니다.

5. 문자열 판별입니다
파이썬은 또한 많은 문자열의 판별 함수를 제공합니다.

(1) string.isalnum () 문자열의 문자가 모두 문자 또는 숫자일 때 True를 반환하고, 그렇지 않으면 False를 반환합니다

s1 = "123asd"
s2 = "as, 123"
print(s1.isalnum()) # >>> True
print(s2.isalnum()) # >>> False

(2) string.isalpha() string의 모든 문자는 문자입니다. True를 반환하고, 그렇지 않으면 False를 반환합니다

s1 = "Python"
s2 = "C++"
print(s1.isalpha()) # >>> True
print(s2.isalpha()) # >>> False

(3) string.isdigit( ) string의 모든 문자는 숫자입니다. True를 반환하고, 그렇지 않으면 False를 반환합니다

s1 = "0106584376"
s2 = "010-7487345"
print(s1.isdigit()) # >>> True
print(s2.isdigit()) # >>> False

(4) string.isupper() string의 모든 글자는 대문자로, True를 반환하고, 그렇지 않으면 False를 반환합니다.
string.islower( ) string의 모든 글자는 소문자로 True를 반환하고, 그렇지 않으면 False를 반환합니다

s1 = "SELECT"
s2 = "Python3.5"
print(s1.isupper()) # >>> True
print(s2.islower()) # >>> False

6. 문자열 바꾸기
string.replace() 함수는 문자열 치환을 구현합니다.새 문자열 개체를 만듭니다. 새 개체는 대체된 개체입니다

s = "123456"
s = s.replace("456", "abc") # >>> s = "123abc"

기본 매개변수는 두 가지가 있는데, 오래된 것은 앞에 있고 새 것은 뒤에 있습니다.

7. 문자열 분할입니다
일반적으로 사용되는 분할 상관 함수는 세 가지입니다: string.split( ); string.partition( ); string.join( )

(1) (1) string.split():

s = "I love you"
s.split("") # >>> 문자열을 구분자로 분할합니다: ["I", "love", "you"]

이 분할 방법은 실제로 문자열의 시작점을 점으로, 끝점을 점으로, 그리고 각 구분 기호를 점으로 하는 것입니다. 만약 인접한 두 점 사이에 또 문자열이 있다면, 이 문자열은 목록의 한 요소입니다. 만약 인접한 두 점 사이에 물건이 없다면, 빈 문자(공백이 아니라 빈 문자)"를 반환합니다. 예를 들어, 위의 예를 들어, 우리는 다음과 같이 변경합니다

s = "I love you "
s.split("") # >>> 문자열 s를 구분자로 분할합니다: ["I", "", "love", "you", "", ""]

실제로 점으로 표현하면 다음과 같습니다: s = ".I..love.you..." 시작과 끝에는 각각 점이 있습니다. 각 인접한 점 사이의 항목을 목록의 요소로 취하면 위의 결과를 얻을 수 있습니다.

(2) (2) string.partition():

s = "I love you"
s.partition("" ") # >>> 공간을 구분자로 사용하여 문자열 s를 구분자로 나눕니다: ["I", "love you"]

 

partition()은 split()과 같은 역할을 합니다. 다만 결과는 세 요소의 목록이고 구분자는 두 번째 요소여야 합니다.

(3) (3) string.join():
이것은 실제로 연결 함수이지만, 저는 여전히 그것을 분할 안에 두고 이야기했습니다.그것의 기능은 string을 구분자로 사용하여 괄호 안의 문자열 시퀀스를 연결하는 것입니다(참고, 문자열로 구성된 목록과 같은 문자열 형식의 시퀀스여야 함).

print(",".join(["I", "wrote", "Python"])) # >>> "I,wrote,Python"
print("**".join("123")) # >>> "1**2**3"

8. 대소문자 변환입니다
세 가지 주요 함수를 소개합니다.

(1) string.upper( ): 모든 소문자를 대문자로 변환합니다. 그러나 이것은 새로운 개체를 생성했을 뿐 원래 개체는 변경되지 않았습니다.

s = "bupt"
print(s.upper()) # >>> "BUPT"
print(s) # >>> "bupt"

(2) string.lower( ): string.upper( )와 같은 의미로 대문자를 소문자로 변환합니다.

s = "Python3"
print(s.lower()) # >>> "python3"

(3) string.swapcase( ) : 새 객체를 생성하며, 새 객체 중 대문자는 소문자로, 소문자는 대문자로 바꿉니다

s = "I Need You"
print(s.swapcase()) # >>> "i nEED yOU"

9. 문자열 단순화합니다
때때로 문자열의 왼쪽 끝과 오른쪽 끝에 공백이 있는 경우가 있는데 이러한 공백은 문자열을 처리하는 데 영향을 미치므로 문자열을 단순화하고 이러한 양쪽 끝의 공백을 제거할 수 있는 기능이 있으면 매우 편리합니다.string.strip() 함수가 이 일을 합니다.

위의 함수와 마찬가지로 실제로 그는 새로운 문자열 객체를 생성했는데, 이 문자열은 원래 문자열과 비교하여 왼쪽과 오른쪽의 공백을 제거합니다.

s = "   I  Need You     "
s = s.strip() # >>> "I  Need You"

문자열 중앙의 공백은 영향을 받지 않습니다

10. 문자열을 뒤집습니다
문자열은 불변 객체이기 때문에 원칙적으로 위의 함수와 마찬가지로 새로운 객체만 생성할 수 있으며, 새로운 객체의 요소 배열은 원래 문자열이 뒤집힌 후의 모습입니다.
뒤집는 방법에는 두 가지가 있습니다.

(1) reversed( ) 함수입니다

s = "1234567"
s1 = reversed(s) # >> 새 개체 만들기
print(s1) # >>> "7654321"

(2) step = 1의 슬라이스입니다

s = "1234567"
s1 = s[:: -1] # >> 새로운 객체입니다
print(s1) # >>> "7654321"

 

반응형