Làm thế nào để bạn so sánh hai chuỗi trong điều kiện if python?

Trong Python, chuỗi là chuỗi ký tự, được lưu trữ hiệu quả trong bộ nhớ dưới dạng đối tượng. Mỗi đối tượng có thể được xác định bằng phương pháp id(), như bạn có thể thấy bên dưới. Python cố gắng sử dụng lại các đối tượng trong bộ nhớ có cùng giá trị, điều này cũng giúp so sánh các đối tượng rất nhanh trong 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()

Để so sánh các chuỗi, Python cung cấp một số toán tử khác nhau để thực hiện việc này. Đầu tiên, chúng tôi sẽ giải thích chúng chi tiết hơn dưới đây. Thứ hai, chúng ta sẽ xem xét cả hai mô-đun string

$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True
0, chứa các phương thức để xử lý các trường hợp không phân biệt chữ hoa chữ thường và không chính xác. Thứ ba, để xử lý các chuỗi nhiều dòng, mô-đun difflib khá tiện dụng. Một số ví dụ sẽ giúp bạn hiểu cách sử dụng chúng

So sánh Chuỗi với == và. = Toán tử

Là một toán tử so sánh cơ bản, bạn sẽ muốn sử dụng

$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True
1 và
$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True
2. Chúng hoạt động theo cách chính xác giống như với các giá trị số nguyên và số float. Toán tử
$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True
1 trả về
$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True
4 nếu khớp chính xác, ngược lại sẽ trả về
$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True
5. Ngược lại, toán tử
$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True
2 trả về
$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True
4 nếu không khớp và ngược lại trả về
$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True
5. Liệt kê 1 chứng minh điều này

Trong một vòng lặp

$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True
9, một chuỗi chứa tên của thành phố Thụy Sĩ "Lausanne" được so sánh với một mục từ danh sách các địa điểm khác và kết quả so sánh được in trên thiết bị xuất chuẩn

Liệt kê 1

Chạy tập lệnh Python từ phía trên, đầu ra như sau

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

Toán tử $ python3 comparing-strings.py comparing Berlin with Lausanne: False comparing Paris with Lausanne: False comparing Lausanne with Lausanne: True 1 và >>> a = 'hello' >>> b = 'hello' >>> c = 'world' >>> a is b True >>> a is c False >>> id(a) 140666888153840 >>> id(b) 140666888153840 >>> 1

Python có hai toán tử so sánh là

$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True
1 và
>>> a = 'hello'
>>> b = 'hello'
>>> c = 'world'
>>> a is b
True
>>> a is c
False
>>> id(a)
140666888153840
>>> id(b)
140666888153840
>>> 
1. Thoạt nhìn chúng có vẻ giống nhau, nhưng thực ra không phải vậy

$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True
1 so sánh hai biến dựa trên giá trị mà chúng đại diện. Ngược lại, toán tử
>>> a = 'hello'
>>> b = 'hello'
>>> c = 'world'
>>> a is b
True
>>> a is c
False
>>> id(a)
140666888153840
>>> id(b)
140666888153840
>>> 
1 so sánh hai biến dựa trên ID đối tượng trong bộ nhớ

John (Doe) và John (Moe) đều được gọi là John. Nếu chúng ta có thể rút gọn họ chỉ bằng tên của họ, họ sẽ có giá trị ngang nhau, nhưng vẫn là hai người khác nhau về chất

Ví dụ tiếp theo chứng minh rằng đối với ba biến có giá trị chuỗi. Hai biến

>>> a = 'hello'
>>> b = 'hello'
>>> c = 'world'
>>> a is b
True
>>> a is c
False
>>> id(a)
140666888153840
>>> id(b)
140666888153840
>>> 
6 và
>>> a = 'hello'
>>> b = 'hello'
>>> c = 'world'
>>> a is b
True
>>> a is c
False
>>> id(a)
140666888153840
>>> id(b)
140666888153840
>>> 
7 có cùng giá trị và Python đề cập đến cùng một đối tượng để giảm thiểu việc sử dụng bộ nhớ

Điều này được thực hiện cho các loại và chuỗi đơn giản theo mặc định, nhưng không phải cho các đối tượng khác

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

Ngay khi giá trị thay đổi, Python sẽ khởi tạo lại đối tượng và gán biến. Trong đoạn mã tiếp theo,

>>> a = 'hello'
>>> b = 'hello'
>>> c = 'world'
>>> a is b
True
>>> a is c
False
>>> id(a)
140666888153840
>>> id(b)
140666888153840
>>> 
7 nhận giá trị là 2 và sau đó,
>>> a = 'hello'
>>> b = 'hello'
>>> c = 'world'
>>> a is b
True
>>> a is c
False
>>> id(a)
140666888153840
>>> id(b)
140666888153840
>>> 
7 và
>>> b = 'world'
>>> id(b)
140666888154416
>>> id(c)
140666888154416
0 đề cập đến cùng một đối tượng

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

Các toán tử so sánh khác

Để so sánh về thứ tự từ điển, bạn có thể sử dụng các toán tử so sánh

>>> b = 'world'
>>> id(b)
140666888154416
>>> id(c)
140666888154416
1,
>>> b = 'world'
>>> id(b)
140666888154416
>>> id(c)
140666888154416
2,
>>> b = 'world'
>>> id(b)
140666888154416
>>> id(c)
140666888154416
3 và
>>> b = 'world'
>>> id(b)
140666888154416
>>> id(c)
140666888154416
4. Bản thân việc so sánh được thực hiện theo từng ký tự. Thứ tự phụ thuộc vào thứ tự của các ký tự trong bảng chữ cái. Thứ tự này phụ thuộc vào bảng ký tự được sử dụng trên máy của bạn khi thực thi mã Python

Hãy ghi nhớ thứ tự phân biệt chữ hoa chữ thường. Như một ví dụ cho bảng chữ cái Latinh, "Bus" đứng trước "bus". Liệt kê 2 cho thấy cách các toán tử so sánh này hoạt động trong thực tế

Liệt kê 2

Chạy tập lệnh Python từ phía trên, đầu ra như sau

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

So sánh chuỗi không phân biệt chữ hoa chữ thường

Các ví dụ trước tập trung vào kết hợp chính xác giữa các chuỗi. Để cho phép so sánh không phân biệt chữ hoa chữ thường, Python cung cấp các phương thức chuỗi đặc biệt như

>>> b = 'world'
>>> id(b)
140666888154416
>>> id(c)
140666888154416
5 và
>>> b = 'world'
>>> id(b)
140666888154416
>>> id(c)
140666888154416
6. Cả hai đều có sẵn trực tiếp dưới dạng phương thức của đối tượng chuỗi theo

>>> b = 'world'
>>> id(b)
140666888154416
>>> id(c)
140666888154416
5 lần lượt chuyển đổi toàn bộ chuỗi thành chữ hoa và
>>> b = 'world'
>>> id(b)
140666888154416
>>> id(c)
140666888154416
6 thành chữ thường. Dựa trên Liệt kê 1, danh sách tiếp theo cho biết cách sử dụng phương pháp
>>> b = 'world'
>>> id(b)
140666888154416
>>> id(c)
140666888154416
6

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Liệt kê 3

Đầu ra như sau

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

So sánh chuỗi sử dụng biểu thức chính quy (RegEx)

Biểu thức chính quy - hay viết tắt là "regex" - xác định một mẫu ký tự cụ thể

Để sử dụng cơ chế này trong Python, trước tiên hãy nhập mô-đun

$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True
0 và xác định một mẫu cụ thể, tiếp theo. Một lần nữa, ví dụ sau dựa trên Liệt kê 1. Mẫu tìm kiếm khớp với "bay" và bắt đầu bằng chữ thường hoặc chữ hoa. Chính xác, mã Python sau tìm thấy tất cả các chuỗi trong đó mẫu tìm kiếm xảy ra bất kể ở vị trí nào của chuỗi - ở đầu, ở giữa hoặc ở cuối

Liệt kê 4

Đầu ra như sau và khớp với "Bayswater", "Table Bay" và "Bombay" từ danh sách các địa điểm

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

So sánh nhiều dòng và danh sách

Cho đến nay những so sánh của chúng ta chỉ dừng lại ở một vài từ. Sử dụng mô-đun

$ python3 comparing-strings-order.py
Berlin comes before Lausanne
Paris comes after Lausanne
Lausanne is equal to Lausanne
1 Python cũng cung cấp một cách để so sánh các chuỗi nhiều dòng và toàn bộ danh sách từ. Đầu ra có thể được cấu hình theo các định dạng khác nhau của các công cụ tìm khác biệt

Ví dụ tiếp theo (Liệt kê 5) so sánh hai chuỗi nhiều dòng theo từng dòng và hiển thị các phần xóa cũng như phần bổ sung. Sau khi khởi tạo đối tượng

$ python3 comparing-strings-order.py
Berlin comes before Lausanne
Paris comes after Lausanne
Lausanne is equal to Lausanne
2 ở dòng 12, việc so sánh được thực hiện bằng cách sử dụng phương thức
$ python3 comparing-strings-order.py
Berlin comes before Lausanne
Paris comes after Lausanne
Lausanne is equal to Lausanne
3 ở dòng 15. Kết quả được in trên đầu ra tiêu chuẩn

Chạy tập lệnh tạo đầu ra như bên dưới. Các dòng bị xóa được biểu thị bằng ký hiệu

$ python3 comparing-strings-order.py
Berlin comes before Lausanne
Paris comes after Lausanne
Lausanne is equal to Lausanne
4 trong khi các dòng có bổ sung bắt đầu bằng ký hiệu
$ python3 comparing-strings-order.py
Berlin comes before Lausanne
Paris comes after Lausanne
Lausanne is equal to Lausanne
5. Hơn nữa, các dòng có thay đổi bắt đầu bằng dấu chấm hỏi. Các thay đổi được biểu thị bằng cách sử dụng biển báo
$ python3 comparing-strings-order.py
Berlin comes before Lausanne
Paris comes after Lausanne
Lausanne is equal to Lausanne
6 tại vị trí tương ứng. Các dòng không có chỉ báo vẫn giống nhau

$ 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.

Phần kết luận

Trong bài viết này, bạn đã học được nhiều cách khác nhau để so sánh các chuỗi trong Python. Chúng tôi hy vọng rằng phần tổng quan này sẽ giúp bạn lập trình hiệu quả trong cuộc sống lập trình viên của mình

Tôi có thể sử dụng == để so sánh hai 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.

Bạn có thể sử dụng toán tử == với chuỗi không?

“==” trả về Boolean True nếu hai chuỗi giống nhau và trả về Boolean False nếu hai chuỗi không giống nhau. “. = ” toán tử trả về Boolean True nếu hai chuỗi không giống nhau và trả về Boolean False nếu hai chuỗi giống nhau.

Có thể sử dụng hàm IF để so sánh các chuỗi không?

Các chuỗi str1 và str2 sẽ được so sánh bằng chức năng này. Nếu hàm trả về giá trị 0, điều đó có nghĩa là các chuỗi bằng nhau, ngược lại, các chuỗi không bằng nhau