Computer >> Máy Tính >  >> Lập trình >> Python

Làm cách nào để tìm tất cả các hoán vị có thể có của một chuỗi đã cho trong Python?

Để tìm tất cả các hoán vị có thể có của một chuỗi nhất định, bạn có thể sử dụng mô-đun itertools có một phương thức hữu ích được gọi là hoán vị (có thể lặp lại [, 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 có thể lặp lại dưới dạng các bộ giá trị.

Để nhận được tất cả các hoán vị dưới dạng chuỗi, bạn sẽ cần phải lặp lại lệnh gọi hàm và nối các bộ giá trị. 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 trong phương thức đã xây dựng mà hãy tạo phương thức của riêng mình, bạn có thể sử dụng giải pháp đệ quy sau:

Các hoán vị
 def permutations(string, step = 0):
    if step == len(string):
        # we've gotten to the end, print the permutation
        print "".join(string)
     for i in range(step, len(string)):
        # copy the string (store as array)
        string_copy = [c for c in string]
         # swap the current index with the step
        string_copy[step], string_copy[i] =string_copy[i], string_copy[step]
         # recurse on the portion of the stringthat has not been swapped yet
        permutations(string_copy, step + 1)
print (permutations ('one'))

ĐẦU RA

one
oen
noe
neo
eno
eon
None