Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách tìm tất cả các hoán vị có thể của một chuỗi cho trước trong Python?

Để tìm tất cả các hoán vị có thể của một chuỗi cho trước, bạn có thể sử dụng module itertools có phương thức hữu ích là permutations(iterable[, r]). Phương thức này trả về các hoán vị độ dài r liên tiếp của các phần tử trong iterable dưới dạng tuple.

Để lấy tất cả các hoán vị dưới dạng chuỗi, bạn sẽ cần lặp qua lời gọi hàm và nối các tuple. Ví dụ:

>>> from itertools import permutations
>>> print([''.join(p) for p in permutations('dune')])
['dune', 'duen', 'dnue', 'dneu', 'deun', 'denu', 'udne', 'uden', 'unde', 'uned', 'uedn', 'uend', 'ndue', 'ndeu', 'nude', 'nued', 'nedu', 'neud', 'edun', 'ednu', 'eudn', 'eund', 'endu', 'enud']

Nếu bạn không muốn sử dụng phương thức có sẵn, mà muốn tự tạo, bạn có thể sử dụng giải pháp đệ quy sau:

def permutations(string, step=0):
    if step == len(string):
        # đã đến cuối, in hoán vị
        print("".join(string))
    for i in range(step, len(string)):
        # sao chép chuỗi (lưu dưới dạng mảng)
        string_copy = [c for c in string]
        # hoán đổi chỉ mục hiện tại với step
        string_copy[step], string_copy[i] = string_copy[i], string_copy[step]
        # đệ quy trên phần của chuỗi chưa được hoán đổi
        permutations(string_copy, step + 1)

permutations('one')

KẾT QUẢ

one
oen
noe
neo
eno
eon
None