Trong hướng dẫn này, chúng ta tìm tất cả hoán vị (permutations) của một chuỗi dùng hàm built-in itertools.permutations().
Quy trình
- Import module
itertools - Khởi tạo chuỗi
- Gọi
itertools.permutations(string)→ trả về iterator các tuple - Chuyển thành list và xử lý
Code
import itertools
string = "XYZ"
# Lấy tất cả hoán vị (dạng tuple)
perm_tuples = list(itertools.permutations(string))
print("--- Hoán vị dạng tuple ---")
print(perm_tuples)
# Chuyển tuple thành chuỗi
print("--- Hoán vị dạng chuỗi ---")
for tup in perm_tuples:
print("".join(tup))
Kết quả
--- Hoán vị dạng tuple ---
[('X', 'Y', 'Z'), ('X', 'Z', 'Y'), ('Y', 'X', 'Z'), ('Y', 'Z', 'X'), ('Z', 'X', 'Y'), ('Z', 'Y', 'X')]
--- Hoán vị dạng chuỗi ---
XYZ
XZY
YXZ
YZX
ZXY
ZYX
Lưu ý
- Số hoán vị = n! (với n = độ dài chuỗi). Chuỗi dài sẽ sinh ra rất nhiều kết quả.
permutations(iterable, r)có tham số r tùy chọn: độ dài hoán vị (mặc định = len(iterable))- Nếu chuỗi có ký tự trùng lặp, sẽ có hoán vị trùng lặp. Dùng
set()để khử trùng.
Ví dụ khử trùng
string = "AAB"
unique_perms = set("".join(p) for p in itertools.permutations(string))
print(unique_perms) # {'AAB', 'ABA', 'BAA'}