So sánh chuỗi trong python | Laptrinhcanban.com

HOME › >>

So sánh chuỗi trong python

Hướng dẫn cách so sánh chuỗi trong python. Trong lập trình, so sánh chuỗi (strings) là một phần quan trọng của quá trình xử lý dữ liệu. Trong Python, chuỗi là một kiểu dữ liệu cơ bản và chúng ta thường cần so sánh chuỗi để kiểm tra xem chúng có giống nhau hay không. Trong bài viết này, chúng ta sẽ tìm hiểu về cách so sánh chuỗi trong Python, bao gồm so sánh bằng, so sánh không phân biệt hoa thường, và sử dụng các phương thức so sánh chuỗi.

So sánh bằng (Equality)

So sánh chuỗi bằng nhau là một phần quan trọng của xử lý dữ liệu trong Python. Để kiểm tra xem hai chuỗi có bằng nhau hay không, bạn có thể sử dụng toán tử so sánh ==. Ví dụ:

print('abc' == 'abc')
##> True

print('abc' == 'def')
##> False

Tương tự chúng ta sử dụng toán tử so sánh khác != để kiểm tra hai chuỗi có khác nhau như sau:

print('abc' != 'abc')
##> False

print('abc' != 'def')
##> True

Lưu ý, các phép so sánh chuỗi bao gồm cả so sánh đồng nhất sẽ phân biệt chữ hoa và chữ thường trong chuỗi. Nếu hai chuỗi giống nhau về ký tự nhưng khác nhau về ký tự chữ hoa chữ thường thì cũng không được coi là giống nhau.

print('abc' == 'ABC')
##> False

print('abc' != 'ABC')
##> True

Thứ tự của các ký tự trong chuỗi cũng được xem xét khi đem đi so sánh. Nếu hai chuỗi giống nhau về ký tự nhưng khác nhau về thứ tự các ký tự trong chuỗi thì cũng không được coi là giống nhau.

print('abc' == 'cab')
##> False

print('abc' != 'bac')
##> True

Nếu bạn muốn so sánh hai chuỗi mà không phân biết ký tự chữ thường chữ hoa trong chuỗi, hãy xem tiếp ở phần dưới đây.

So sánh không phân biệt hoa thường

Trong một số trường hợp, bạn có thể muốn so sánh chuỗi mà không phân biệt hoa thường. Điều này có nghĩa rằng “Hello” và “hello” sẽ được coi là giống nhau. Để thực hiện so sánh không phân biệt hoa thường, bạn có thể chuyển đổi cả hai chuỗi về cùng một kiểu chữ cái trước khi so sánh, bằng cách sử dụng phương thức lower() hoặc upper().

Dưới đây là ví dụ sử dụng phương thức lower():

str1 = "Hello"
str2 = "hello"
if str1.lower() == str2.lower():
print("Chuỗi giống nhau (không phân biệt hoa thường)")
else:
print("Chuỗi khác nhau")

Kết quả sẽ là “Chuỗi giống nhau (không phân biệt hoa thường)”.

Tương tự như khi chúng ta sử dụng phương thức upper():

str1 = "Hello"
str2 = "hello"
if str1.upper() == str2.upper():
print("Chuỗi giống nhau (không phân biệt hoa thường)")
else:
print("Chuỗi khác nhau")

So sánh lớn nhỏ

Sử dụng các toán tử so sánh

Chúng ta sử dụng các toán tử so sánh như <, <=, >, >= để tìm mối quan hệ lớn nhỏ giữa 2 chuỗi trong python. Và phần tử đầu tiên có giá trị khác nhau giữa 2 chuỗi sẽ được lấy ra để so sánh.

Ví dụ:

print('a' < 'b')
#>> True

print('aa' <= 'ab')
#>> True

print('abc' > 'abcd')
#>> False

print('abc' >= 'abcd')
#>> False

Nguyên lý so sánh

Khác với so sánh số trong python, chúng ta không thể sử dụng trực tiếp giá trị của chuỗi để so sánh lớn nhỏ giữa chuỗi trong python. Thay vào đó, chúng ta sử dụng các điểm mã unicode (unicode code point) của các ký tự trong chuỗi để so sánh.

Để kiểm tra điểm mã Unicode của một ký tự, chúng ta sử dụng tới hàm ord() trong python như sau:

print(ord("a"))
#> 97
print(ord("b"))
#> 98
print(ord("A"))
#> 65

Khi so sánh lớn nhỏ hai ký tự đơn, chúng ta đơn giản so sánh điểm mã unicode của chúng. Ví dụ, do điểm mã unicode của ký tự a là 97 sẽ lớn hơn của ký tự A à 65 nên phép so sánh sau sẽ cho ra kết quả True:

print( "a" > "A")
#>True

Tuy nhiên khi so sánh 2 chuỗi ký tự với nhau, chúng ta không thể đơn thuần so sánh các điểm mã unicode của từng ký tự được. Lúc này, phép so sánh sẽ bắt đầu từ ký tự đầu tiên trong hai chuỗi, và nếu chúng giống nhau, các ký tự tiếp theo được so sánh cho tới khi xuất hiện một ký tự khác nhau đầu tiên trong hai chuỗi. Khi đó, điểm mã unicode của ký tự này sẽ đại diện cho cả chuỗi và được dùng để so sánh lớn nhỏ. Ví dụ:

print( "aAaaaaa" < "aaa")
#>> True
print( "a" > "Aaaa")
#>> True

Ở ví dụ 1, ký tự khác nhau đầu tiên trong hai chuỗi là A và a, do đó mặc dù chuỗi bên trái nhiều ký tự hơn chuỗi bên phải nhưng điểm mã unicode của A lại nhỏ hơn a, do đó chuỗi bên trái sẽ nhỏ hơn chuỗi bên phải.
Tương tự ở ví dụ 2, mặc dù chuỗi bên trái chỉ gồm 1 ký tự, nhưng điểm mã unicode của a lại lớn hơn A, kết quả là chuỗi bên trái sẽ lớn hơn chuỗi bên phải.

Một điều đặc biệt khi so sánh lớn nhỏ giữa 2 chuỗi trong python là, các ký tự viết hoa sẽ LUÔN nhỏ hơn các ký tự chữ thường.

print('Z' < 'z')
# True

print('Z' < 'b')
# True

print('B' < 'b')
# True

print('A' < 'b')
# True

Do đó trong trường hợp này chúng ta không cần phải dùng hàm ord() để tìm điểm mã unicode của ký tự nữa, mà có thể dùng quy luật ở trên để so sánh lớn nhỏ giữa ký tự viết thường và viết hoa trong Python.

So sánh chuỗi theo từng ký tự

Nếu bạn cần so sánh chuỗi từng ký tự một, bạn có thể sử dụng vòng lặp và chỉ mục để duyệt qua từng ký tự trong chuỗi. Dưới đây là một ví dụ:

str1 = "apple"
str2 = "banana"
min_length = min(len(str1), len(str2))
equal = True

for i in range(min_length):
if str1[i] != str2[i]:
equal = False
break

if equal:
if len(str1) == len(str2):
print("Hai chuỗi giống nhau")
else:
print("Hai chuỗi khác nhau")
else:
print("Hai chuỗi khác nhau")

So sánh chuỗi bằng biểu thức chính quy (Regular Expressions)

Khi bạn cần thực hiện so sánh phức tạp hơn hoặc tìm kiếm chuỗi con trong chuỗi gốc dựa trên một mẫu cụ thể, bạn có thể sử dụng biểu thức chính quy (regular expressions). Python cung cấp thư viện re để làm việc với biểu thức chính quy.

import re

pattern = r"apple"
text = "I have an apple and a banana"
match = re.search(pattern, text)
if match:
print("Tìm thấy chuỗi 'apple' trong văn bản")

Sử dụng các phương thức so sánh chuỗi

Python cung cấp nhiều phương thức để so sánh chuỗi. Dưới đây là một số ví dụ:

  1. str.startswith() và str.endswith(): Để kiểm tra xem một chuỗi có bắt đầu hoặc kết thúc bằng một chuỗi con cụ thể hay không.

    str = "Hello, World"
    if str.startswith("Hello"):
    print("Chuỗi bắt đầu bằng 'Hello'")
    if str.endswith("World"):
    print("Chuỗi kết thúc bằng 'World'")
  2. str.find() và str.rfind(): Để tìm vị trí đầu tiên hoặc vị trí cuối cùng của một chuỗi con trong chuỗi gốc.

    str = "Hello, World"
    position = str.find("World")
    if position != -1:
    print("Chuỗi con 'World' được tìm thấy tại vị trí", position)
  3. str.count(): Để đếm số lần xuất hiện của một chuỗi con trong chuỗi gốc.

    str = "The quick brown fox jumps over the lazy dog"
    count = str.count("the")
    print("Số lần xuất hiện của 'the' trong chuỗi:", count)
  4. str.isalpha() và str.isdigit(): Để kiểm tra xem chuỗi chỉ chứa ký tự chữ cái hoặc chữ số hay không.

    str1 = "Hello"
    str2 = "12345"
    if str1.isalpha():
    print("str1 chỉ chứa chữ cái")
    if str2.isdigit():
    print("str2 chỉ chứa chữ số")

So sánh khớp một phần

Chúng ta sử dụng các toán tử innot in để so sánh khớp một phần và kiểm tra một chuỗi có nằm trong chuỗi khác trong Python.

Ví dụ để kiểm tra chuỗi x có nằm trong y hay không, chúng ta viết x in y, và nếu x có nằm trong y thì kết quả True, và nếu x không nằm trong y thì kết quả False sẽ trả về.

Ví dụ:

print('cc' in 'bb-cc-dd')
#>> True

print('1' in '234')
#>> False

Ngược lại với toán tử in, chúng ta dùng toán tử not in để kiểm tra một chuỗi có KHÔNG nằm trong chuỗi khác hay không. Ví dụ để kiểm tra chuỗi x có không nằm trong y hay không, chúng ta viết x not in y, và nếu x có nằm trong y thì kết quả False, và nếu x không nằm trong y thì kết quả True sẽ trả về.
Ví dụ:

print('cc' not in 'bb-cc-dd')
#>> False

print('1' not in '234')
#>> True

Chúng ta hay sử dụng toán tử kiểm tra một chuỗi có nằm trong chuỗi khác trong các biểu thức điều kiện của lệnh if hoặc vòng lặp for.
Ví dụ, chúng ta viết một chương trình xóa ảnh JPG hoặc PNG từ trong một thư mục. Bằng cách lấy đuôi file và kiểm tra đuôi file có chứa chuỗi JPG hoặc PNG hay không, chúng ta có thể xác định và xóa đi các file ảnh trong thư mục chỉ định như sau:

import os

duoi_file = "JPG_PNG"
src = "data/picture"
for file in os.listdir(src):
file_ext = os.path.splitext(file)
if file_ext in duoi_file:
os.remove(os.path.join(src, file))

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về cách so sánh chuỗi trong python rồi. So sánh chuỗi là một phần quan trọng trong lập trình Python và là một phần quan trọng của quá trình xử lý dữ liệu. Chúng ta đã tìm hiểu cách thực hiện so sánh bằng, so sánh không phân biệt hoa thường, và sử dụng các phương thức và phương pháp so sánh chuỗi. Việc nắm vững cách làm này giúp bạn xử lý dữ liệu chuỗi hiệu quả và thực hiện các tác vụ so sánh phức tạp hơn khi cần thiết trong ứng dụng của mình.

URL Link

https://laptrinhcanban.com/python/nhap-mon-lap-trinh-python/thao-tac-voi-chuoi-string-trong-python/so-sanh-chuoi-trong-python/

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME  › >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.