Tin tức và phân tích của tất cả các thiết bị di động

Các chương trình Python cho các hoạt động chuỗi

Trong hướng dẫn này, bạn sẽ viết các chương trình Python giải quyết các câu hỏi phổ biến về hoạt động chuỗi.

Bạn sẽ học cách kiểm tra xem các chuỗi python có phải là palindromes, đảo chữ cái hay không và liệu chúng có nằm trong trường hợp tiêu đề hay không.

Chuỗi Python: tổng quan nhanh

Trong Python, chuỗi là kiểu dữ liệu tích hợp mạnh mẽ. Họ có thể lưu trữ một chuỗi các ký tự.

Lập chỉ mục chuỗi Python: Giống như tất cả các lần lặp Python, các chuỗi cũng không được lập chỉ mục. Vì vậy, các chỉ số chính xác cho một chuỗi độ dài N là 0, 1, 2 lên đến N- 1.

Python cũng hỗ trợ lập chỉ mục phủ định để truy cập các phần tử từ cuối chuỗi. Như vậy -1 là chỉ số của ký tự cuối cùng trong chuỗi, -2 là chỉ số của ký tự áp chót trong chuỗi, v.v.

Tính bất biến của chuỗi Python: Ngoài ra, chuỗi Python là bất biến, vì vậy chúng không thể được sửa đổi tại chỗ. Tuy nhiên, bạn có thể gọi một số phương thức chuỗi trên chúng và nhận các bản sao của chuỗi với kết quả mong muốn.

Bây giờ chúng ta đã tìm hiểu những kiến ​​thức cơ bản về chuỗi trong Python, hãy chuyển sang giải quyết một số vấn đề đơn giản nhưng thú vị.

Hãy bắt đầu.

Kiểm tra xem chuỗi python có phải là palindrome không

Sự cố: Đưa ra một chuỗi python, hãy kiểm tra xem đó có phải là một palindrome không.

Nếu vậy, trả về True; ngược lại trả về Sai.

Vì vậy, vấn đề đầu tiên của chúng ta là kiểm tra xem một chuỗi đã cho có phải là một palindrome hay không.

Một palindrome là một chuỗi đọc giống nhau từ trái sang phải và phải sang trái. Hãy nêu một số ví dụ: xe đua, liên kết, cấp độ, phụ nữ, radar, v.v.

Dưới đây là các bước để giải quyết vấn đề này:

  • Lấy bản sao đảo ngược của chuỗi và lưu trữ nó trong một biến khác nếu cần.
  • So sánh các giá trị của chuỗi ban đầu và chuỗi bị đảo ngược.
  • Nếu chúng bằng nhau, chuỗi là một palindrome. Vì vậy, trả về True và dừng lại.
  • Nếu bản gốc và bản sao đảo ngược không bằng nhau, chuỗi không phải là một bảng màu. Vì vậy, chúng ta nên trả về Sai.

Thao tác chính là lấy một bản sao đảo ngược của chuỗi. Có một số cách khác nhau để làm điều này trong Python.

Tuy nhiên, chúng ta sẽ thảo luận về hai cách tiếp cận:

  • Sử dụng cắt chuỗi
  • Sử dụng Reverse() và Join()

Làm cách nào để đảo ngược một chuỗi trong python bằng cách cắt?

cú pháp [start: stop: step] trả về một lát của chuỗi từ đầu đến cuối, nhưng không có điểm dừng, với bước kích thước bước.

  • Nếu bạn bỏ qua phần đầu, lát cắt sẽ bắt đầu ở phần đầu của chuỗi.
  • Nếu bạn không chỉ định chỉ mục dừng, thì lát cắt sẽ kéo dài đến cuối chuỗi.
  • Và các giá trị bước âm có thể được sử dụng để trả về các lát cắt bắt đầu từ cuối chuỗi.

Vì thế [::-1] trả về một bản sao đảo ngược của chuỗi.

Ô mã sau định nghĩa hàm is_palindrome().

Nó lấy một chuỗi làm đối số và trả về Đúng hoặc Sai tùy thuộc vào việc đó có phải là một đối số hay không.

Ở đây chúng tôi đã sử dụng kỹ thuật cắt chuỗi để lấy bản sao ngược lại của chuỗi.

def is_palindrome(this_str):
  rev_str = this_str[::-1]
  if (this_str == rev_str):
    return True
  else:
    return False

▶️ Bây giờ chúng ta đã xác định hàm, chúng ta có thể tiếp tục và gọi nó với bất kỳ chuỗi hợp lệ nào làm đối số.

is_palindrome("racecar")
True

Trong ô mã trên, chiếc xe đua là một palindrome. Vì vậy, is_palindrome() trả về True như mong đợi.

Bây giờ hãy thử gọi hàm với bất kỳ chuỗi nào không phải là palindrome, chẳng hạn như một dòng sông.

is_palindrome("river")
False

Và như bạn có thể thấy, nó trả về Sai, điều này đúng.

Cách đảo ngược chuỗi python bằng cách sử dụng Reverse() và Join()

Trong Python, bạn có thể sử dụng phương thức join() cùng với hàm Reverse() để đảo ngược một chuỗi.

  • Hàm Reverse() trả về một trình vòng lặp đảo ngược thông qua các ký tự trong một chuỗi.
  • Sau đó, bạn có thể sử dụng phương thức join() để kết hợp các ký tự này theo thứ tự ngược lại.

Sử dụng phương pháp trên, bạn có thể viết lại hàm is_palindrome() như trong ô mã bên dưới.

def is_palindrome(this_str):
  rev_str="".join(reversed(this_str))
  if (this_str == rev_str):
    return True
  else:
    return False

Bạn cũng có thể sử dụng is_palindrome() bên trong danh sách kết hợp để thu thập tất cả các palindrome từ danh sách chuỗi dài hơn.

str_list = ["refer","blue","level","12321","dragon"]

palindromes = [string for string in str_list if is_palindrome(string)]
print(palindromes)
# Output
['refer', 'level', '12321']

Đây là cách mã trên hoạt động:

  • Đi qua str_list, gọi is_palindrome() trên mỗi chuỗi.
  • Nếu is_palindrome() trả về True, hãy thêm chuỗi vào danh sách các palindrome.

Như bạn có thể thấy trong kết quả ở trên, palindromes là danh sách tất cả các chuỗi palindromic trong str_list.

Kiểm tra xem hai chuỗi python có đảo chữ cái không

Một câu hỏi phổ biến khác mà bạn có thể gặp trong các cuộc phỏng vấn là kiểm tra xem một cặp chuỗi str1 và str2 có phải là đảo chữ cái hay không.

Hai chuỗi được gọi là đảo chữ cái nếu số ký tự trong hai chuỗi hoàn toàn giống nhau. Điều này có nghĩa là bạn có thể lấy một trong các chuỗi bằng cách hoán vị hoặc sắp xếp lại các ký tự trong chuỗi kia.

Ví dụ về đảo ngữ là vị trí trạng thái, ghi chú bình hoa, khuỷu tay bên dưới, v.v.

Làm cách nào để kiểm tra đảo chữ cái với đối tượng truy cập trong python?

Một cách đơn giản và trực quan là đếm số lần xuất hiện của mỗi ký tự trong hai chuỗi. Và sau đó kiểm tra xem các số có bằng nhau không.

Điều này dễ thực hiện hơn với đối tượng Counter từ mô-đun itertools. Đối tượng Counter trả về một từ điển Python: với các ký tự là khóa và các số tương ứng của chúng là giá trị.

Xét các chuỗi “save” và “vase” như hình bên dưới.

str1 = "save"
str2 = "vase"

Ở đây c1 và c2 là các đối tượng truy cập chứa số ký tự trong chuỗi str1 và str2 tương ứng.

from collections import Counter
c1 = Counter(str1)
c2 = Counter(str2)
print(c1)
print(c2)
c1 == c2

# Output
Counter({'s': 1, 'a': 1, 'v': 1, 'e': 1})
Counter({'v': 1, 'a': 1, 's': 1, 'e': 1})
True

c1 == c2 trả về True vì str1 và str2 là đảo chữ cái.

Sử dụng logic này, bây giờ chúng ta có thể tiếp tục và xác định are_anagrams() với hai tham số word1 và word2. Trong phần thân của hàm, chúng ta kiểm tra xem Counter(word1) == Counter(word2).

def are_anagrams(word1, word2):
  if Counter(word1) ==  Counter(word2):
    return True
  else:
    return False

▶️ Để xác minh, hãy gọi are_anagrams() với các đối số str1, str2. Vì str1 và str2 là đảo chữ cái (“save” và “vase”), nên hàm trả về giá trị True, giá trị này đúng.

are_anagrams(str1, str2)
True

Làm cách nào để kiểm tra đảo chữ cái với các bản sao được sắp xếp của chuỗi?

Có một cách khác bạn có thể làm điều đó.

Nếu hai chuỗi là đảo chữ cái, thì các bản sao được sắp xếp của chúng bằng nhau.

Vì vậy, chúng ta có thể viết lại are_anagrams() để xem phiên bản đã sắp xếp của str1 có giống với phiên bản đã sắp xếp của str2 hay không. Nếu chúng bằng nhau, thì hai chuỗi là đảo chữ cái; nếu không thì không.

Sử dụng phương pháp trên để kiểm tra sự bằng nhau của các bản sao được sắp xếp, chúng ta có thể viết lại hàm are_anagrams() như sau.

def are_anagrams(word1, word2):
  if sorted(word1) ==  sorted(word2):
    return True
  else:
    return False

Bây giờ hãy thực hiện một số lời gọi hàm.

  • “khuỷu tay” và “bên dưới” là đảo chữ cái và are_anagrams() trả về True.
  • Và “trạng thái” và “nếm” không phải là đảo chữ cái và hàm trả về Sai.
are_anagrams("below","elbow")
True

are_anagrams("state","tasted")
False

Kiểm tra xem chuỗi python có trong tiêu đề trường hợp không

Đây là câu hỏi cuối cùng của chúng tôi cho hướng dẫn này.

Vấn đề: Bạn đã chỉ định chuỗi: tên người – với họ và tên.

Bạn cần kiểm tra xem chữ cái đầu tiên trong tên của bạn đã được viết hoa chưa.

Loại trường hợp này, trong đó chữ cái đầu tiên của mỗi từ được viết hoa, được gọi là viết hoa.

Vì vậy, bạn cần kiểm tra xem tên có được viết hoa không:

1. Nếu vậy, hãy gửi thông báo rằng định dạng có trong tiêu đề.

2. Nếu không, hãy trả về một bản sao của chuỗi được định dạng tiêu đề

  • Python có phương thức chuỗi istitle() tích hợp để kiểm tra xem một chuỗi có trong tiêu đề hay không.

.istitle() trả về True nếu chuỗi được định dạng theo tiêu đề, nếu không thì trả về False.

  • Và phương thức string title() của Python trả về một bản sao của chuỗi có định dạng tiêu đề.

Vì vậy, bây giờ bạn có thể sử dụng hai phương pháp này để giải quyết vấn đề.

Xác định hàm check_titlecase() lấy tên làm đối số.

  • Bạn có thể gọi phương thức istitle() trên chuỗi đầu vào để kiểm tra xem nó có được định dạng trong tiêu đề hay không.
  • Nếu là True, bạn có thể xuất chuỗi đó đã có trong tiêu đề.
  • Nếu không, bạn có thể gọi phương thức title() và trả về một bản sao của chuỗi tiêu đề.

Ô mã sau xác định hàm check_titlecase().

def check_titlecase(name):
  if name.istitle():
    print(f"'{name}' is already formatted in title case.")
  else:
    return name.title()

Bây giờ, hãy gọi phương thức check_titlecase() với một đối số.

check_titlecase("jane smith")

# Output
Jane Smith

Trong kết quả ở trên, bạn có thể thấy rằng chuỗi “Jane Smith” hiện có trong tiêu đề.

▶️ Hãy lấy một ví dụ khác.

check_titlecase("agatha Christie")

# Output
Agatha Christie

Lần này, hãy gọi một hàm với một chuỗi ký tự viết hoa của tiêu đề.

check_titlecase("Grace Hopper")

# Output
'Grace Hopper' is already formatted in title case.

Chúng tôi nhận được thông báo rằng chuỗi được định dạng cho tiêu đề và chức năng hoạt động như mong đợi.

Kết luận 👩 🏫

Bây giờ chúng ta hãy tóm tắt các vấn đề chúng ta đã thảo luận cho đến nay.

  • Để kiểm tra xem một chuỗi có phải là một đối xứng không, hãy kiểm tra xem chuỗi đó và phiên bản đảo ngược của nó có bằng nhau không. Bạn có thể sử dụng các phương thức tách chuỗi hoặc tích hợp sẵn để đảo ngược chuỗi.
  • Để kiểm tra xem hai chuỗi có đảo chữ cái hay không, hãy kiểm tra xem các bản sao được sắp xếp của chúng có bằng nhau không. Để sắp xếp một chuỗi, hãy sử dụng hàm có sẵn sorted().
  • Để kiểm tra xem một tên có phân biệt chữ hoa chữ thường hay không, hãy sử dụng phương thức .istitle() để kiểm tra và phương thức .title() để nhận bản sao chuỗi phân biệt chữ hoa chữ thường.

Hy vọng bạn thích hướng dẫn chuỗi Python này. Trong bước tiếp theo, hãy tìm hiểu cách sử dụng khả năng hiểu danh sách trong Python hoặc tìm hiểu về toán tử bất đẳng thức trong Python.

Chúc bạn học tập và viết mã vui vẻ!🎉