Làm thế nào để bạn tìm thấy đảo chữ cái của một chuỗi trong python?

Bạn có biết cách kiểm tra xem hai chuỗi có phải là đảo chữ cái của nhau trong Python không?

Hai chuỗi là đảo chữ của nhau nếu cả hai đều chứa các ký tự giống nhau và mỗi ký tự xuất hiện trong mỗi chuỗi với số lần như nhau. Hai cách để kiểm tra xem hai chuỗi có phải là đảo chữ cái trong Python hay không bằng cách sử dụng hàm sorted[] hoặc bộ sưu tập. Hàm truy cập []

Đảo ngữ về mặt kỹ thuật phải có nghĩa nhưng trong tình huống này, chúng ta sẽ coi như đảo chữ cũng là hoán vị của các ký tự không có nghĩa

Hãy đảo chữ bắt đầu

Mục lục

Đảo ngữ trong Python là gì?

Đảo chữ cái không phải là một khái niệm dành riêng cho Python, nó là một khái niệm chung hơn. Nếu hai từ chứa các chữ cái giống nhau và mỗi chữ cái xuất hiện cùng số lần thì chúng là đảo chữ của nhau

Ví dụ: các chuỗi sau đây là đảo chữ của nhau

'elle' and 'leel'

Các ví dụ khác của đảo chữ cái là

'hello' and 'olleh'
'hello' and 'lleoh'

Và các chuỗi sau đây không phải là đảo chữ cái…

'elle' and 'leele'

Vì vậy, làm thế nào chúng ta có thể xác minh đảo chữ cái trong Python?

Một cách là bằng cách sử dụng

Hãy xem kết quả mà hàm đã sắp xếp trả về là gì…

>>> sorted['elle']
['e', 'e', 'l', 'l']
>>> sorted['leel']
['e', 'e', 'l', 'l'] 

Hàm được sắp xếp lấy một đối số có thể lặp lại và trả về một danh sách được sắp xếp có chứa các mục trong có thể lặp lại

Trong trường hợp cụ thể này, chúng tôi đã chuyển một chuỗi cho hàm đã sắp xếp [vâng, một chuỗi có thể lặp lại] và chúng tôi nhận lại một danh sách các ký tự

Hãy xem đầu ra của chức năng được sắp xếp

Bạn nghĩ làm cách nào để sử dụng chức năng này để kiểm tra xem hai chuỗi có phải là đảo chữ cái của nhau không?

Chúng ta có thể chỉ cần so sánh hai danh sách được trả về bởi hàm đã sắp xếp. Nếu hai danh sách bằng nhau thì hai chuỗi là đảo chữ cái

Đây là logic chúng ta có thể sử dụng

>>> sorted['leel'] == sorted['leel']
True
>>> sorted['leel'] == sorted['leele']
False 

Ví dụ về chương trình để kiểm tra xem hai chuỗi có phải là đảo ngữ của nhau không

Hãy viết một chương trình Python đơn giản để đọc hai chuỗi từ người dùng bằng cách gọi hàm nhập và kiểm tra xem hai chuỗi có phải là đảo chữ cái không

first_string = input["Provide the first string: "]
second_string = input["Provide the second string: "] 

if sorted[first_string] == sorted[second_string]:
    print["The two strings are anagrams of each other."]
else:
    print["The two strings are not anagrams of each other."] 

Sau khi đọc hai chuỗi từ đầu vào của người dùng, chúng tôi xác minh, sử dụng câu lệnh if other của Python, nếu các danh sách được trả về bởi hàm được sắp xếp giống nhau

Xác minh xem chương trình có thực hiện những gì nó dự kiến ​​thực hiện hay không…

$ python anagrams.py
Provide the first string: hello
Provide the second string: olelh
The two strings are anagrams of each other.
 
$ python anagrams.py
Provide the first string: hello
Provide the second string: ollleh
The two strings are not anagrams of each other. 

có vẻ tốt

Chúng tôi đã tạo một chương trình đơn giản thực hiện kiểm tra đảo chữ giữa hai chuỗi

Thực hiện kiểm tra đảo chữ trong hàm Python

Trước khi thực hiện thuật toán kiểm tra đảo chữ phức tạp hơn, tôi muốn cấu trúc lại mã trước đó và chuyển tất cả logic vào một hàm

Hàm lấy hai chuỗi làm đối số và in các thông báo mà chúng ta đã thấy trước đây

def anagram_checker[first_value, second_value]:
    if sorted[first_string] == sorted[second_string]:
        print["The two strings are anagrams of each other."]
    else:
        print["The two strings are not anagrams of each other."] 

Và đây là cách chúng ta có thể gọi nó từ phần chính của chương trình Python

________số 8

Trước khi tiếp tục với hướng dẫn này, hãy xác minh rằng mã mới hoạt động như mong đợi

Trong phần tiếp theo, chúng ta sẽ xem cách nâng cao mã của mình

Cách tìm đảo chữ cho một chuỗi trong danh sách các chuỗi

Đã đến lúc tìm hiểu cách đảo chữ cho một chuỗi trong danh sách các chuỗi

Giả sử chúng ta có danh sách sau

words = ['enif', 'ollhe', 'aivrre', 'gdo', 'atc', 'neif'] 

Chúng tôi muốn lấy một chuỗi làm đầu vào của người dùng và tìm bất kỳ đảo chữ nào cho chuỗi đó trong danh sách các từ

Bạn đã biết cách lấy đầu vào của người dùng, vì vậy bây giờ hãy tập trung vào việc cập nhật hàm anagram_checker

Chức năng này bây giờ sẽ

  • Lấy làm đối số chuỗi chúng tôi đang tìm kiếm đảo chữ cái và danh sách các từ
  • Trả về một danh sách chứa bất kỳ đảo chữ cái nào được tìm thấy
  • Nếu không tìm thấy đảo chữ cái, danh sách được trả về trống
'hello' and 'olleh'
'hello' and 'lleoh'
0

Chúng tôi sử dụng vòng lặp for để duyệt qua từng từ trong danh sách để xác minh xem từ nào là đảo chữ cái cho giá trị đầu tiên được truyền cho hàm

Hãy kiểm tra chức năng này để xem nó có trả về kết quả như mong đợi không…

'hello' and 'olleh'
'hello' and 'lleoh'
1

Ba bài kiểm tra được thực hiện đối với chức năng của chúng tôi trả về kết quả chính xác

Cách tạo đảo chữ cái cho một từ bằng Python

Bây giờ chúng ta sẽ giải quyết một vấn đề hơi khác

Đưa ra một chuỗi, chúng tôi muốn tạo tất cả các từ được tạo từ các hoán vị có thể có của các chữ cái trong từ

Vì vậy, đối với từ 'cat', chúng tôi muốn đầu ra sau

'hello' and 'olleh'
'hello' and 'lleoh'
2

Mô-đun itertools của Python cung cấp hàm permurations[] có thể giúp chúng ta thực hiện điều này

Hãy xem hàm permutations[] trả về kết quả gì khi chúng ta truyền chuỗi của mình cho nó

'hello' and 'olleh'
'hello' and 'lleoh'
3

Chúng tôi lấy lại một itertools. đối tượng hoán vị. Hãy xem liệu chúng ta có thể đưa nó vào danh sách không…

'hello' and 'olleh'
'hello' and 'lleoh'
4

Lần này chúng tôi lấy lại một danh sách các bộ dữ liệu. Các phần tử của mỗi bộ là các ký tự trong chuỗi gốc

Tôi muốn xem danh sách các chuỗi, chúng tôi có thể tạo danh sách đó như thế nào?

Chúng ta có thể sử dụng cách hiểu danh sách và phương thức nối chuỗi Python

'hello' and 'olleh'
'hello' and 'lleoh'
5

Nó trông đẹp hơn

Phương thức nối biến mỗi bộ thành một chuỗi

Cách tìm đảo ngữ trong danh sách Python bằng từ điển

Bây giờ, hãy tìm hiểu cách chúng ta có thể sử dụng từ điển Python để lưu trữ tất cả các đảo chữ cái bắt đầu từ một danh sách các chuỗi

'hello' and 'olleh'
'hello' and 'lleoh'
6

Thuật toán lưu trữ đảo chữ sẽ hoạt động như sau

  • Đi qua từng chuỗi trong danh sách và trước tiên sắp xếp các ký tự của nó
  • Kiểm tra xem có đảo chữ cái nào của chuỗi này đã là khóa từ điển không
  • Nếu không thêm từ này làm khóa từ điển, nếu không, hãy thêm từ này vào giá trị [của danh sách loại] được ánh xạ tới khóa từ điển hiện có

Ví dụ: nếu chúng tôi lấy chuỗi đầu tiên là 'cat', chúng tôi mong đợi một cái gì đó như thế này

'hello' and 'olleh'
'hello' and 'lleoh'
7

Vì vậy, 'mèo' được bắt gặp và nó được đặt làm khóa từ điển. Sau đó, khi 'tac' và 'atc' được xử lý, chúng sẽ được thêm vào danh sách được ánh xạ tới khóa 'cat' vì chúng là đảo chữ của 'cat'

Có ý nghĩa?

Hãy viết mã để làm điều này…

Đầu tiên, chúng ta cần một hàm lấy một từ và danh sách các khóa từ điển và kiểm tra xem đảo chữ cái của từ đó có trong các khóa từ điển không

Nếu có, nó sẽ trả về khóa nếu không, nó sẽ trả về Không có

'hello' and 'olleh'
'hello' and 'lleoh'
8

Kiểm tra chức năng này đầu tiên…

Tình huống trong đó đảo chữ cái cho từ là một trong các khóa từ điển

'hello' and 'olleh'
'hello' and 'lleoh'
9

Tình huống trong đó không có đảo chữ cái cho từ trong danh sách khóa từ điển

'elle' and 'leele'
0

Đảm bảo rằng bạn hiểu chức năng này trước khi tiếp tục xem xét rằng chúng tôi sẽ gọi chức năng này khi tạo từ điển đảo chữ của chúng tôi

Viết một chức năng tạo ra một từ điển đảo chữ

Và bây giờ chúng ta sẽ viết hàm tạo từ điển đảo chữ bắt đầu từ một danh sách các từ

Hàm thực hiện như sau

  • Đi qua từng từ trong danh sách các từ
  • Chuyển chữ thành chữ thường
  • Gọi hàm trước get_anagram_from_dictionary_keys[]
  • Nếu một khóa được trả về bởi chức năng trước đó, từ này chỉ cần được thêm vào danh sách được ánh xạ tới khóa từ điển hiện có. Nếu không thì từ này trở thành một khóa từ điển mới
'elle' and 'leele'
1

Đã đến lúc kiểm tra mã của chúng tôi

'elle' and 'leele'
2

Và đầu ra là…

'elle' and 'leele'
3

Nó hoạt động như chúng ta mong đợi

Sử dụng bộ sưu tập. Counter[] để tìm kiếm đảo ngữ

Một cách khác để kiểm tra xem hai chuỗi có phải là đảo chữ cái của nhau hay không bằng cách sử dụng hàm Counter[] của mô-đun bộ sưu tập

Cho một chuỗi, hàm Counter[] trả về một đối tượng giống như từ điển trong đó các khóa là các ký tự của chuỗi và các giá trị là số lần mỗi ký tự xuất hiện trong chuỗi

Đây là một ví dụ

'elle' and 'leele'
4

Bây giờ, hãy áp dụng hàm Counter cho chuỗi 'tac'

'elle' and 'leele'
5

Chúng ta chỉ cần so sánh hai đối tượng được trả về để xác minh xem hai chuỗi có phải là đảo chữ cái của nhau không

'elle' and 'leele'
6

Một thủ thuật khác mà bạn có thể sử dụng trong các chương trình Python của mình. 🙂

Phần kết luận

Trong hướng dẫn này, chúng tôi đã thực hiện nhiều cách để xác minh xem hai chuỗi có phải là đảo chữ của nhau không

Chúng ta cũng đã biết cách tìm đảo chữ cái của một từ trong danh sách các từ và cách tạo từ bằng cách hoán vị tất cả các ký tự trong một từ.

Tôi biết nó khá nhiều, tôi hy vọng bạn thấy nó hữu ích. 😉

Bài viết liên quan

Cách viết mã trò chơi Hangman bằng Python. Dễ thực hiện [Từng bước]

Tạo một lớp trừu tượng Python. Hướng dẫn từng bước

Hàm Python. Làm cho mã của bạn có thể tái sử dụng

Claudio Sabato

Tôi là Trưởng nhóm công nghệ, Kỹ sư phần mềm và Huấn luyện viên lập trình. Tôi muốn giúp bạn trong hành trình trở thành Nhà phát triển siêu hạng

Chủ Đề