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ố 8Trướ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