Khi cần sắp xếp ma trận dựa trên số lượng palindrome (chuỗi đối xứng) trong mỗi hàng, ta định nghĩa hàm đếm palindrome, dùng list comprehension và join/reversed.
Ví dụ
def get_palindrome_count(row):
return len([element for element in row if ''.join(list(reversed(element))) == element])
my_list = [["abcba", "hdgfue", "abc"], ["peep"], ["py", "is", "best"], ["sees", "level", "non", "noon"]]
print("Danh sách là:")
print(my_list)
my_list.sort(key=get_palindrome_count)
print("Danh sách kết quả:")
print(my_list)
Kết quả đầu ra
Danh sách là: [['abcba', 'hdgfue', 'abc'], ['peep'], ['py', 'is', 'best'], ['sees', 'level', 'non', 'noon']] Danh sách kết quả: [['py', 'is', 'best'], ['abcba', 'hdgfue', 'abc'], ['peep'], ['sees', 'level', 'non', 'noon']]
Giải thích
- Hàm
get_palindrome_countđếm số chuỗi palindrome trong hàng: so sánh chuỗi với chuỗi đảo ngược. - Hàng 0: "abcba" là palindrome → 1.
- Hàng 1: "peep" là palindrome → 1.
- Hàng 2: không có palindrome → 0.
- Hàng 3: "sees", "level", "non", "noon" đều là palindrome → 4.
sort(key=...)sắp xếp tăng dần theo số lượng: 0, 1, 1, 4.
Cách kiểm tra palindrome hiệu quả hơn: element == element[::-1] thay vì ''.join(list(reversed(element))).