Python을 사용하여 문자열 비교

Python에서 문자열은 문자의 시퀀스로 메모리에 객체로 효과적으로 저장됩니다. 각 개체는 다음을 사용하여 식별할 수 있습니다. id() 방법은 아래에서 볼 수 있듯이. Python은 동일한 값을 가진 메모리의 객체를 재사용하려고 시도하므로 Python에서 객체를 매우 빠르게 비교할 수 있습니다.

$ python
Python 3.9.0 (v3.9.0:9cf6752276, Oct  5 2020, 11:29:23) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = "abc"
>>> b = "abc"
>>> c = "def"
>>> print (id(a), id(b), id(c))
(139949123041320, 139949123041320, 139949122390576)
>>> quit()

문자열을 비교하기 위해 Python은 몇 가지 다른 연산자를 제공합니다. 먼저, 아래에서 더 자세히 설명하겠습니다. 두 번째로, 우리는 두 가지를 모두 살펴보겠습니다. string 그리고 re 대소문자를 구분하지 않고 부정확한 일치를 처리하는 메서드가 포함된 모듈입니다. 셋째, 여러 줄 문자열을 처리하려면 difflib 모듈 꽤 편리합니다. 다양한 예제를 통해 사용 방법을 이해하는 데 도움이 될 것입니다.

Strngs를 == 및 != 연산자와 비교

기본 비교 연산자로 다음을 사용하고 싶을 것입니다. ==!=. 정수 및 부동 소수점 값과 정확히 동일한 방식으로 작동합니다. 그만큼 == 연산자 반환 True 정확히 일치하는 경우, 그렇지 않은 경우 False 반환됩니다. 대조적으로, != 연산자 반환 True 일치하는 항목이 없으면 그렇지 않으면 반환됩니다. False. 목록 1 이것을 보여줍니다.

안에 for 루프에서는 스위스 도시 "Lausanne"의 이름이 포함된 문자열을 다른 장소 목록의 항목과 비교하고 비교 결과를 표준 출력에 인쇄합니다.

목록 1:


listOfPlaces = ["Berlin", "Paris", "Lausanne"]
currentCity = "Lausanne"

for place in listOfPlaces:
    print (f"comparing {place} with {currentCity}: %{place == currentCity}")

위에서 Python 스크립트를 실행하면 출력은 다음과 같습니다.

$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True

XNUMXD덴탈의 ==is 연산자

Python에는 두 가지 비교 연산자가 있습니다. ==is. 언뜻 보면 똑같은 것처럼 보이지만 실제로는 그렇지 않습니다.

== 두 변수가 나타내는 값을 기준으로 두 변수를 비교합니다. 대조적으로, is 연산자는 메모리의 개체 ID를 기반으로 두 변수를 비교합니다.

John(Doe)과 John(Moe)은 둘 다 John이라고 불립니다. 그들을 이름만으로 축소할 수 있다면 가치는 동일하지만 질적으로는 여전히 다른 두 사람이 될 것입니다.

다음 예에서는 문자열 값이 있는 세 개의 변수에 대해 이를 보여줍니다. 두 가지 변수 ab 동일한 값을 가지며, Python은 메모리 사용량을 최소화하기 위해 동일한 객체를 참조합니다.

이는 기본적으로 단순 유형 및 문자열에 대해 수행되지만 다른 객체에 대해서는 수행되지 않습니다.

>>> a = 'hello'
>>> b = 'hello'
>>> c = 'world'
>>> a is b
True
>>> a is c
False
>>> id(a)
140666888153840
>>> id(b)
140666888153840
>>> 

값이 변경되자마자 Python은 객체를 다시 인스턴스화하고 변수를 할당합니다. 다음 코드 조각에서 b 2의 값을 얻은 다음 bc 동일한 객체를 참조하십시오.

>>> b = 'world'
>>> id(b)
140666888154416
>>> id(c)
140666888154416

더 많은 비교 연산자

사전순으로 비교하려면 비교 연산자를 사용할 수 있습니다. <, >, <=>=. 비교 자체는 문자별로 수행됩니다. 순서는 알파벳 문자의 순서에 따라 달라집니다. 이 순서는 Python 코드를 실행하는 동안 컴퓨터에서 사용 중인 문자 테이블에 따라 다릅니다.

순서는 대소문자를 구분한다는 점에 유의하세요. 라틴 알파벳의 예로서 "버스"는 "버스" 앞에 옵니다. 목록 2 이러한 비교 연산자가 실제로 어떻게 작동하는지 보여줍니다.

목록 2:


listOfPlaces = ["Berlin", "Paris", "Lausanne"]
currentCity = "Lausanne"

for place in listOfPlaces:
    if place < currentCity:
            print (f"{place} comes before {currentCity}")
    elif place > currentCity:
            print (f"{place} comes after {currentCity}")
    else:
            print (f"{place} is equal to {currentCity}")

위에서 Python 스크립트를 실행하면 출력은 다음과 같습니다.

$ python3 comparing-strings-order.py
Berlin comes before Lausanne
Paris comes after Lausanne
Lausanne is equal to Lausanne

대소문자를 구분하지 않는 문자열 비교

이전 예제에서는 문자열 간의 정확한 일치에 중점을 두었습니다. 대소문자를 구분하지 않는 비교를 허용하기 위해 Python은 다음과 같은 특수 문자열 메서드를 제공합니다. upper()lower(). 둘 다 해당 문자열 개체의 메서드로 직접 사용할 수 있습니다.

upper() 전체 문자열을 대문자로 변환하고 lower() 각각 소문자로. 기반 목록 1 다음 목록에서는 사용 방법을 보여줍니다. lower() 방법.

모범 사례, 업계에서 인정하는 표준 및 포함된 치트 시트가 포함된 Git 학습에 대한 실습 가이드를 확인하십시오. 인터넷 검색 Git 명령을 중지하고 실제로 배움 이것!

목록 3:


listOfPlaces = ["Berlin", "Paris", "Lausanne"]
currentCity = "lausANne"

for place in listOfPlaces:
    print (f"comparing {place} with {place.lower() == currentCity.lower()}: {currentCity}")

출력은 다음과 같습니다.

$ python3 comparing-strings-case-insensitive.py
comparing Berlin with lausANne: False
comparing Paris with lausANne: False
comparing Lausanne with lausANne: True

정규 표현식(RegEx)을 사용하여 문자열 비교

A 정규 표현식 – 줄여서 “정규식”은 특정 문자 패턴을 정의합니다.

Python에서 이 메커니즘을 사용하려면 re 모듈 먼저 특정 패턴을 정의하고 그 다음에는 다시 한번 말씀드리지만, 다음 예는 다음을 기반으로 합니다. 목록 1. 검색 패턴은 "bay"와 일치하며 소문자 또는 대문자로 시작됩니다. 정확하게 다음 Python 코드는 문자열의 어느 위치(처음, 중간, 끝)에 관계없이 검색 패턴이 발생하는 모든 문자열을 찾습니다.

목록 4:


import re


listOfPlaces = ["Bayswater", "Table Bay", "Bejing", "Bombay"]


pattern = re.compile("[Bb]ay")

for place in listOfPlaces:
    if pattern.search(place):
        print (f"{place} matches the search pattern")

출력은 다음과 같으며 장소 목록에서 "Bayswater", "Table Bay" 및 "Bombay"와 일치합니다.

$ python3 comparing-strings-re.py
Bayswater matches the search pattern
Table Bay matches the search pattern
Bombay matches the search pattern

여러 줄 및 목록 비교

지금까지 우리의 비교는 단지 몇 단어에 불과했습니다. 사용하여 difflib 모듈 Python은 또한 여러 줄의 문자열과 전체 단어 목록을 비교하는 방법을 제공합니다. 출력은 다양한 형식의 diff 도구에 따라 구성될 수 있습니다.

다음 예(목록 5)는 두 개의 여러 줄 문자열을 한 줄씩 비교하고 추가뿐만 아니라 삭제도 표시합니다. 초기화 후 Differ 12행의 객체 비교는 다음을 사용하여 수행됩니다. compare() 15행의 메소드. 결과는 표준 출력에 인쇄됩니다.


import difflib
 


original = ["About the IIS", "", "IIS 8.5 has several improvements related", "to performance in large-scale scenarios, such", "as those used by commercial hosting providers and Microsoft's", "own cloud offerings."]


edited = ["About the IIS", "", "It has several improvements related", "to performance in large-scale scenarios."]


d = difflib.Differ()
 

diff = d.compare(original, edited)
 

print ('n'.join(diff))

스크립트를 실행하면 아래와 같은 출력이 생성됩니다. 삭제된 줄은 다음과 같이 표시됩니다. - 기호가 추가된 줄은 다음으로 시작합니다. + 징후. 또한 변경 사항이 있는 줄은 물음표로 시작됩니다. 변경 사항은 다음을 사용하여 표시됩니다. ^ 해당 위치에 표시됩니다. 표시자가 없는 행은 여전히 ​​동일합니다.

$ python comparing-strings-difflib.py
  About the IIS
  
- IIS 8.5 has several improvements related
?  ^^^^^^

+ It has several improvements related
?  ^

- to performance in large-scale scenarios, such
?                                        ^^^^^^

+ to performance in large-scale scenarios.
?                                        ^

- as those used by commercial hosting providers and Microsoft's
- own cloud offerings.

결론

이 기사에서는 Python에서 문자열을 비교하는 다양한 방법을 배웠습니다. 이 개요가 개발자의 삶에서 효과적으로 프로그래밍하는 데 도움이 되기를 바랍니다.

감사의 글

저자는 기사를 준비하는 동안 도움을 준 Mandy Neumeyer에게 감사의 말씀을 전하고 싶습니다.

타임 스탬프 :

더보기 스택카부스