Cách so sánh các chuỗi trong danh sách python

So sánh chuỗi là một tính năng thiết yếu của nhiều ứng dụng. Nhiều phần mềm và hệ thống cơ sở dữ liệu yêu cầu lập trình như vậy để tìm kiếm sự khác biệt giữa các chuỗi khác nhau. Trong bài viết này, bạn sẽ tìm hiểu về so sánh chuỗi và các cách khác nhau để so sánh chuỗi

So sánh chuỗi là gì?

So sánh chuỗi là quá trình so sánh hai chuỗi. Hai chuỗi này đóng vai trò là toán hạng hoặc tham số tham gia để kiểm tra sự khác biệt của chúng. Hầu hết, quy trình so sánh sử dụng giá trị ASCII hoặc giá trị Unicode để so sánh hai chuỗi. Có ba cách tiếp cận lập trình khác nhau mà chúng ta có thể sử dụng để so sánh hai chuỗi trong Python. Bây giờ chúng ta hãy thảo luận chi tiết về từng người trong số họ

Phương pháp 1. Sử dụng toán tử quan hệ

Toán tử quan hệ chủ yếu được sử dụng để so sánh hai hằng số. Vì, nó thuộc danh mục toán tử nhị phân, nó cũng giúp so sánh các chuỗi trong Python. Sau khi sử dụng một toán tử quan hệ trên cả hai toán hạng, nó sẽ trả về Đúng hoặc Sai tùy thuộc vào điều kiện. Các loại toán tử này trong Python còn được gọi là toán tử so sánh. Có 6 loại toán tử so sánh khác nhau trong Python

== (Toán tử bằng)Kiểm tra xem cả hai toán hạng có bằng nhau hay không> (Lớn hơn)Kiểm tra xem toán hạng bên trái có lớn hơn toán hạng bên phải hay không< (Nhỏ hơn)Kiểm tra xem toán hạng bên phải có bằng không . = (Không bằng) Kiểm tra xem cả hai toán hạng có không bằng nhau hay không

Trong trường hợp toán tử quan hệ của Python, giá trị Unicode của từng ký tự trong chuỗi được kiểm tra bắt đầu từ phần tử thứ 0 cho đến chỉ mục cuối cùng hoặc phần cuối của chuỗi. Dựa trên việc kiểm tra tất cả Unicode của toán hạng bên trái khớp với toán hạng của Unicode bên phải, một giá trị Boolean được trả về

Ví dụ

print("Karlos" == "Karlos")
print("Karlos" < "karlos")
print("Karlos" > "karlos")
print("Karlos" != "Karlos")

đầu ra

True
True
False
False

Giải trình

Đây là một chương trình đơn giản sử dụng toán tử quan hệ để so sánh toán hạng bên phải của nó với toán hạng bên trái của nó. Ở đây, toán tử kiểm tra giá trị Unicode của từng ký tự trong hai chuỗi và trả về True nếu cả hai số Unicode khớp nhau; . Hàm print() sẽ hiển thị True hoặc False tùy thuộc vào việc so sánh các chuỗi

Phương pháp 2. Sử dụng toán tử is và is not (Identity)

Trong Python, toán tử == được sử dụng để so sánh các giá trị cho cả hai toán hạng trong khi kiểm tra sự bằng nhau. Nhưng toán tử 'is' của Python (là toán tử nhận dạng) giúp kiểm tra xem cả hai toán hạng của nó có đang đề cập đến cùng một đối tượng hay không. Điều này cũng xảy ra trong trường hợp. = và 'is not' của Python

Chương trình

val1 = "Karlos"
val2 = "Karlos"
val3 = val1
valn = "karlos"

print(" The ID of val1 is: ", hex(id (val1)))
print(" The ID of val2 is: ", hex(id (val2)))
print(" The ID of val3 is: ", hex(id (val3)))
print(" The ID of valn is: ", hex(id (valn)))
print(val1 is val1)
print(val1 is val2)
print(val1 is val3)
print(valn is val1)

đầu ra

The ID of val1 is: 0x21d012c4f70
The ID of val2 is: 0x21d012c4f70
The ID of val3 is: 0x21d012c4f70
The ID of valn is: 0x21d012c7cb0
True
True
True
False

Giải trình

Ở đây chúng tôi đang sử dụng toán tử nhận dạng để kiểm tra và so sánh hai chuỗi. Ở đây chúng tôi đã khai báo bốn biến sẽ chứa một số giá trị chuỗi. Biến val1 và val2 sẽ giữ “Karlos” và val3 sẽ giữ giá trị của val1. Valn cuối cùng sẽ chứa một chuỗi “karlos”. Bây giờ, mỗi trong số chúng là các đối tượng khác nhau và do đó ID đối tượng có thể khác nhau. Do đó, chúng tôi đang sử dụng kết hợp các hàm hex(id()) để tìm nạp và hiển thị ID đối tượng cho từng biến được tạo

Bạn sẽ nhận thấy rằng ID của ba đối tượng đầu tiên sẽ giống nhau vì tất cả chúng đều có cùng giá trị (do tối ưu hóa không gian) và do đó, print() sẽ hiển thị cùng một vị trí cho cả ba đối tượng này. Trong trường hợp đối tượng valn, sẽ có ID đối tượng khác vì nó có hằng số được khởi tạo khác. Giống như cách chúng ta có thể nói rằng giá trị được giữ bởi valn không bằng val1. Đây là cách toán tử nhận dạng có thể giúp so sánh hai chuỗi

Phương pháp 3. So sánh chuỗi không nhạy cảm

Trong các chủ đề trước, chúng ta đã thảo luận về cách khớp chuỗi chính xác. Tuy nhiên, để thực hiện so sánh không phân biệt chữ hoa chữ thường, chúng ta phải sử dụng các phương thức Lower() và Upper(). Chúng ta có thể tìm thấy cả hai phương thức này trong các đối tượng chuỗi của Python. Phương thức upper() được sử dụng để chuyển đổi toàn bộ chuỗi thành chữ hoa, trong khi phương thức Lower() được sử dụng để chuyển đổi tất cả các chuỗi thành chữ thường của chúng

Chương trình

listOfCities = ["Mumbai", "Bangaluru", "Noida"]
currCity = "noiDa"
for loc in listOfCities:
    print (" Case-Insensitive Comparison:  %s with %s: %s" % (loc, currCity, loc.lower() == currCity.lower()))

đầu ra

Case-Insensitive Comparison: Mumbai with noiDa: False
Case-Insensitive Comparison: Bangaluru with noiDa: False
Case-Insensitive Comparison: Noida with noiDa: True

Giải trình

Trong chương trình này, chúng tôi đã lấy một danh sách các chuỗi có ba giá trị khác nhau. Chúng tôi đã lấy một biến khác currCity đang lưu trữ một chuỗi noiDa khác. Tiếp theo, chúng ta phải lặp qua danh sách chuỗi (i. e. , biến listOfCities) để kiểm tra xem curCity có khớp với bất kỳ chuỗi nào hay không. Ngoài ra, chúng ta phải sử dụng objname. Lower() để chuyển cả hai chuỗi thành chữ thường rồi sử dụng toán tử == để so sánh cả hai ký tự oeprand

Phương pháp 4. Sử dụng hàm do người dùng định nghĩa

Ngoài tất cả các kỹ thuật trên, chúng ta cũng có thể tạo hàm do người dùng xác định của riêng mình bằng cách sử dụng từ khóa 'def' và lấy từng ký tự từ cả hai chuỗi và so sánh chúng bằng toán tử quan hệ. Chức năng này sẽ cho phép hai tham số chuỗi cần được so sánh. Nếu chuỗi khớp bất kể chữ hoa hay chữ thường, nó sẽ hiển thị khớp bằng cách trả về giá trị TRUE

Chương trình

def strcmpr(strg, strgg):
    cnt1 = 0
    cnt2 = 0
    for i in range(len(strg)):
        if strg[i] >= "0" and strg[i] <= "9":
            cnt1 += 1   
    for i in range(len(strgg)):
        if strgg[i] >= "0" and strgg[i] <= "9":
            cnt2 += 1
    return cnt1 == cnt2
   
print('Compare String 246 and 2468: ', strcmpr("246", "2468"))
print('Compare String KARLOS and karlos:', strcmpr("KARLOS", "karlos"))

đầu ra

Compare String 246 and 2468: False
Compare String KARLOS and karlos: True

Giải trình

Đây là một cách truyền thống khác để so sánh các chuỗi trong Python. Ở đây, chúng tôi đang tạo thủ công một hàm do người dùng xác định sẽ đếm từng ký tự của chuỗi một và nếu khớp sẽ trả về True nếu không sẽ trả về False. Nhưng trong trường hợp này, chúng tôi không quan tâm đến phân biệt chữ hoa chữ thường. Và do đó, hàm strcmpr() thứ hai sẽ trả về True

Phương pháp 5. Sử dụng biểu thức chính quy

Biểu thức chính quy hoặc biểu thức chính quy xác định một mẫu cụ thể trong phần tử lập trình. Ngoài ra, ở đây, chúng ta sẽ sử dụng các biểu thức chính quy để tìm các mẫu trong các ký tự của chuỗi được so sánh. Để triển khai khái niệm biểu thức chính quy trong Python, chúng ta sẽ sử dụng mô-đun re. Lần này chúng ta sẽ sử dụng phương thức compile() của re module để kiểm tra pattern

Chương trình

________số 8_______

đầu ra

Madhya Pradesh is matching with the search pattern
Uttar Pradesh is matching with the search pattern

Giải trình

Ở đây, trước tiên chúng tôi đang nhập mô-đun re (biểu thức chính quy). Sau đó, chúng tôi đang xác định một danh sách có tên của 4 trạng thái khác nhau. Bây giờ, chúng tôi đang sử dụng lại. compile() để kiểm tra xem các chuỗi trong danh sách có “Pradesh” với ‘p’ là chữ thường hay chữ hoa. Nếu có, vòng lặp for sẽ lặp qua đối tượng có thể lặp lại Danh sách trạng thái và nếu mẫu. search() tìm thấy vị trí khớp, nó sẽ in thông báo – “Theis khớp với mẫu tìm kiếm”

Phần kết luận

Trong số tất cả những cách này, sử dụng toán tử quan hệ hoặc toán tử định danh có ý nghĩa tốt nhất và là cách hiệu quả nhất để so sánh các chuỗi. Một số kỳ thi cạnh tranh có thể yêu cầu bạn áp dụng biểu thức chính quy hoặc kiểm tra các chuỗi có phân biệt chữ hoa chữ thường. Trong trường hợp đó, bạn phải thực hiện theo phương pháp 3 và phương pháp 5. Nhưng, hãy chắc chắn rằng phương pháp 3 và phương pháp 5 không hiệu quả. Nếu bạn chỉ muốn kiểm tra số lượng chuỗi thì phương pháp 4 (kỹ thuật do người dùng xác định) là dành cho bạn

Làm cách nào để so sánh 2 chuỗi trong Python?

Bạn có thể so sánh các chuỗi trong Python bằng cách sử dụng đẳng thức ( == ) và phép so sánh ( < , > ,. = , . Không có phương pháp đặc biệt nào để so sánh hai chuỗi.

Làm cách nào để tìm sự khác biệt giữa hai danh sách chuỗi trong Python?

Có thể tìm thấy sự khác biệt giữa hai danh sách (giả sử list1 và list2) bằng hàm đơn giản sau. Bằng cách sử dụng chức năng trên, sự khác biệt có thể được tìm thấy bằng cách sử dụng diff(temp2, temp1) hoặc diff(temp1, temp2) . Cả hai sẽ cho kết quả ['Four', 'Three'].