Hoán vị của một số đối tượng là biểu diễn cách các đối tượng có thể xuất hiện trong các trình tự khác nhau. Nhưng đôi khi chúng ta có hai đối tượng giống nhau trong một dãy đối tượng cho trước. Trong trường hợp đó, hai trình tự sẽ trở nên giống nhau. Trong bài viết này, chúng ta sẽ thấy cách chỉ biểu diễn các trình tự duy nhất từ một danh sách đối tượng cho trước.
Mô-đun itertools có phương thức permutations giúp chúng ta đạt được điều này. Để lấy các hoán vị duy nhất, chúng ta nhờ phương thức set chỉ lưu các phần tử phân biệt. Trước đó, chúng ta lấy các phần tử theo thứ tự đã sắp xếp bằng phương thức sorted.
Trong chương trình dưới đây, K là số lượng tối đa các phần tử duy nhất chúng ta muốn hiển thị ra khỏi toàn bộ các hoán vị duy nhất có thể. Sử dụng vòng lặp while, chúng ta liên tục thêm phần tử duy nhất vào danh sách cuối cùng chỉ khi nó chưa có trong tập hợp.
Ví dụ
from itertools import permutations
def gia_tri_hoan_vi(chuoi, k):
s = sorted(list(chuoi))
p = permutations(s)
m = 0
tap_hop = set()
chuoi_moi = ''
while m < k:
chuoi_moi = ''.join(next(p))
if chuoi_moi not in tap_hop:
tap_hop.add(chuoi_moi)
print(chuoi_moi)
m += 1
chuoi = "xyxxz"
i = 12
gia_tri_hoan_vi(chuoi, i)
Kết quả
Chạy mã trên cho kết quả sau:
xxxyz xxxzy xxyxz xxyzx xxzxy xxzyx xyxxz xyxzx xyzxx xzxxy xzxyx xzyxx