Cách so sánh chuỗi trong Python

Bạn thường thấy các phép so sánh được thực hiện giữa các loại số trong Python. Nhưng bạn cũng có thể so sánh các chuỗi. Hóa ra, việc so sánh các chuỗi có nghĩa là so sánh các con số bí mật

Trước khi đi vào chi tiết, hãy xem sơ qua cách so sánh các chuỗi trong Python

So sánh chuỗi với == và. =

So sánh các chuỗi bằng và không bằng các toán tử rất dễ hiểu. Bạn có thể kiểm tra xem một chuỗi có bằng hay không bằng một chuỗi khác

Ví dụ

name = "Jack"

print(name == "John")
print(name != "John")

đầu ra

False
True

Comparing Strings with , =

Để so sánh các chuỗi theo thứ tự bảng chữ cái, bạn có thể sử dụng toán tử

name = "Jack"

print(name == "John")
print(name != "John")
7

Chẳng hạn, hãy so sánh tên “Alice” và “Bob”. Phép so sánh này tương ứng với việc kiểm tra xem Alice có đứng trước Bob theo thứ tự bảng chữ cái hay không

print("Alice" < "Bob")

đầu ra

True

Bây giờ bạn đã có công cụ để so sánh các chuỗi trong Python. Tiếp theo, hãy tìm hiểu cách so sánh chuỗi hoạt động ở hậu trường

Chuỗi Unicode trong Python

Trong thực tế, so sánh các chuỗi Python có nghĩa là so sánh các số nguyên dưới mui xe

Để hiểu cách thức hoạt động của nó, trước tiên bạn cần hiểu khái niệm về Unicode

Chuỗi Python sử dụng Tiêu chuẩn Unicode để biểu thị các ký tự. Điều này có nghĩa là mỗi ký tự có một mã số nguyên duy nhất được gán cho nó. Đây là giá trị số nguyên Unicode được so sánh khi so sánh các chuỗi trong Python

Đây là bảng Unicode cho các ký tự tiếng Anh (còn được gọi là các giá trị ASCII)

UnicodeCharacterUnicodeCharacterUnicodeCharacterUnicodeCharacter64@80P96`112p65A81Q97a113q66B82R98b114r67C83S99c115s68D84T100d116t69E85U101e117u70F86V102f118v71G87W103g119w72H88X104h120x73I89Y105i121y74J90Z106j122z75K91[107k123{76L92\108l124. 77M93]109m125}78N94^110n126~79O95_111o

Khi một chương trình Python so sánh các chuỗi, nó sẽ so sánh các giá trị Unicode của các ký tự

Nhân tiện, để kiểm tra Unicode của một ký tự, bạn không cần phải tra cứu từ bảng này. Thay vào đó, bạn có thể sử dụng hàm ord() có sẵn

Ví dụ

>>> ord('a')
97
>>> ord('b')
98
>>> ord('c')
99
>>> ord('d')
100

Bây giờ, hãy kiểm tra các giá trị Unicode cho các phiên bản viết hoa của bốn ký tự trên

>>> ord('A')
65
>>> ord('B')
66
>>> ord('C')
67
>>> ord('D')
68

Như bạn có thể thấy, các giá trị Unicode cho các ký tự viết hoa khác với các ký tự viết thường của chúng. Điều này nhấn mạnh một điểm quan trọng—Python phân biệt chữ hoa chữ thường với các ký tự và chuỗi

Ví dụ, kết quả của sự so sánh này

'A' < 'a'

Năng suất đúng

Điều này là do

  • Hàm ord() trả về 65 cho 'A'
  • Hàm ord() trả về 97 cho 'a'
  • –> Kết quả 65 < 97 là True

Cách so sánh chuỗi Python hoạt động dưới mui xe

Khi bạn so sánh các chuỗi trong Python, các chuỗi được so sánh từng ký tự bằng cách sử dụng các giá trị Unicode

Khi bạn so sánh hai ký tự, quá trình này khá đơn giản. Nhưng điều gì xảy ra khi bạn so sánh các chuỗi, nghĩa là các chuỗi ký tự?

Hãy chứng minh quá trình với các ví dụ

Ví dụ 1—Chuỗi nào có trước theo thứ tự bảng chữ cái

Cùng so sánh hai cái tên “Alice” và “Bob” xem “Alice” có hơn kém “Bob”

________số 8

Điều này nói rằng "Alice" nhỏ hơn "Bob". Trong đời thực, điều này có nghĩa là Alice đến trước Bob theo thứ tự bảng chữ cái, điều này hoàn toàn hợp lý

Nhưng làm thế nào để Python biết điều đó?

Python bắt đầu bằng cách so sánh các ký tự đầu tiên của chuỗi. Trong trường hợp của “Alice” và “Bob”, nó bắt đầu bằng cách kiểm tra xem ‘A’ có nhỏ hơn ‘B’ trong Unicode không

>>> ord('A') < ord('B') # Corresponds to 65 < 66
True

Vì ord('A') trả về giá trị Unicode là 65 và ord('B') 66, phép so sánh sẽ đánh giá là True

Điều này có nghĩa là Python không cần phải tiếp tục nữa. Dựa trên các chữ cái đầu tiên, có thể xác định rằng “Alice” nhỏ hơn “Bob” vì ‘A’ nhỏ hơn ‘B’ trong Unicode

Đây là cách đơn giản nhất để hiểu cách Python so sánh các chuỗi

Hãy xem một ví dụ phức tạp hơn một chút trong đó các chuỗi được so sánh có các chữ cái đầu tiên giống nhau

Ví dụ 2—Cách so sánh các chuỗi có các chữ cái đầu tiên bằng nhau

Điều gì xảy ra nếu các chữ cái đầu tiên bằng nhau khi so sánh hai chuỗi?

Chẳng hạn, hãy kiểm tra xem “Axel” có đứng trước “Alex” theo thứ tự bảng chữ cái không

name = "Jack"

print(name == "John")
print(name != "John")
0

Kết quả

name = "Jack"

print(name == "John")
print(name != "John")
1

Điều này cho thấy rằng Alex đến trước Axel, đó thực sự là trường hợp

Hãy xem cách Python có thể xác định điều này

  1. Các chữ cái đầu tiên được so sánh. Cả hai đều là 'A', vì vậy có một "hòa". Việc so sánh tiếp tục với các ký tự tiếp theo
  2. Các ký tự thứ hai là 'x' và 'l'. Giá trị unicode cho 'x' là 120 và 108 cho 'l'. Và 120 < 108 trả về Sai. Do đó, toàn bộ so sánh chuỗi trả về Sai

Ví dụ 3—Cách so sánh các chuỗi có phần đầu giống hệt nhau

Điều gì xảy ra nếu các chuỗi bằng nhau, nhưng có các ký tự bổ sung ở cuối chuỗi kia?

Chẳng hạn, bạn có thể xác định xem “Alex” có đứng trước “Alexis” theo thứ tự bảng chữ cái không?

Hãy kiểm tra điều này bằng Python

name = "Jack"

print(name == "John")
print(name != "John")
2

Kết quả

True

Trong trường hợp này, trình thông dịch Python chỉ coi chuỗi dài hơn là chuỗi lớn hơn. Nói cách khác, “Alex” đứng trước “Alexis” theo thứ tự bảng chữ cái

Bây giờ bạn đã hiểu cách so sánh chuỗi hoạt động ẩn trong Python

Cuối cùng, chúng ta hãy xem xét một ứng dụng thú vị của so sánh chuỗi bằng cách so sánh dấu thời gian

So sánh Dấu thời gian trong Python với So sánh Chuỗi

Trong hướng dẫn này, bạn đã biết rằng mỗi ký tự trong Python có một giá trị Unicode là một số nguyên. Điều này cũng không ngoại lệ đối với các chuỗi số

Ví dụ: chuỗi “1” có giá trị Unicode là 49 và “2” có giá trị Unicode là 50, v.v.

name = "Jack"

print(name == "John")
print(name != "John")
4

Giá trị Unicode của một ký tự số tăng lên khi số đó tăng lên

Điều này có nghĩa là so sánh thứ tự của các chuỗi số sẽ cho bạn một kết quả chính xác

name = "Jack"

print(name == "John")
print(name != "John")
5

Nhưng tại sao bạn lại so sánh các số dưới dạng chuỗi?

So sánh các chuỗi số rất hữu ích khi nói về dấu thời gian của định dạng ISO 8601 2021-12-14T09. 30. 16+00. 00

Ví dụ: hãy kiểm tra xem “2021-12-14T09. 30. 16+00. 00” xuất hiện trước “2022-01-01T00. 00. 00+00. 00“

name = "Jack"

print(name == "John")
print(name != "John")
6

Nhưng đợi chút. Toán tử so sánh < có bất kỳ ý tưởng nào về ngày tháng và mức độ ưu tiên của chúng không?

Nó không. Nó chỉ biết cách thực hiện so sánh chuỗi ký tự theo ký tự

Như bạn đã học trong các ví dụ trước, phép so sánh bắt đầu bằng ký tự đầu tiên. Nếu chúng giống nhau, việc so sánh tiếp tục từ ký tự thứ 2, v.v.

Khi so sánh dấu thời gian ISO 8601 trong Python, quy trình này giống như so sánh bất kỳ chuỗi nào khác trong Python. (Lưu ý rằng điều này hoạt động vì thứ tự của các thành phần thời gian. Một năm đến trước một tháng. Một tháng đến trước ngày, v.v. Do đó, nếu số năm giữa hai dấu thời gian khác nhau, bạn có thể rút ra kết luận mà không cần nhìn vào các dấu thời gian còn lại. )

Nơi đây

  • Cả hai dấu thời gian đều bắt đầu bằng “2″. “2” < “2” là Sai
  • Ký tự thứ hai là “0” cho cả hai. “0” < “0” là Sai
  • Ký tự thứ ba là “2” cho cả hai. “2” < “2” là Sai
  • Nhưng ký tự thứ tư thì khác. Bên trái là “1” nhưng bên phải là “2”. Và “1” < “2” trả về True
  • Sự so sánh kết thúc ngay tại đây. Vế trái nhỏ hơn vế phải. Có nghĩa là ngày bên trái xảy ra trước ngày bên phải

Đây chính xác là cách bạn so sánh dấu thời gian trong đời thực. Bạn sẽ bắt đầu với năm và nhận thấy rằng năm 2021 đến trước năm 2022, vì vậy bất kể phần còn lại của dấu thời gian nói gì, năm 2021 phải trước năm 2022

Sự kết luận

So sánh chuỗi là một tính năng quan trọng trong Python

Các toán tử so sánh tích hợp sẵn của Python có thể được sử dụng để so sánh chuỗi. Các toán tử tích hợp này là

  • bằng (==)
  • không bằng (. =)
  • lớn hơn (>)
  • ít hơn (<)
  • nhỏ hơn hoặc bằng (<=)
  • lớn hơn hoặc bằng (>=)

Dưới mui xe, không có thứ gọi là so sánh chuỗi. Thay vào đó, các mã số (Unicodes) của các ký tự được so sánh với nhau. Khi hai chuỗi có các chữ cái đầu tiên bằng nhau, thì các chữ cái thứ hai được so sánh. Nếu chúng cũng bằng nhau, thì cái thứ ba được so sánh, v.v.

Python có thể so sánh các chuỗi với == không?

Kiểm tra chuỗi bằng trong Python . we can check whether strings are equal or not using the “==” or by using the “.

Bạn có thể sử dụng == để so sánh các chuỗi không?

Bạn không nên sử dụng == (toán tử đẳng thức) để so sánh các chuỗi này vì chúng so sánh tham chiếu của chuỗi, i. e. liệu chúng có phải là cùng một đối tượng hay không. Mặt khác, phương thức equals() so sánh xem giá trị của các chuỗi có bằng nhau hay không và không phải chính đối tượng.