Giả sử chúng ta có một chuỗi s và một số r. Chúng ta phải hiển thị tất cả các hoán vị của r số ký tự trong s. Chúng ta có hàm permutations () để nhận tất cả các hoán vị. Hàm này có bên trong thư viện itertools.
Vì vậy, nếu đầu vào là s ="HELLO" r =3, thì đầu ra sẽ là
>['HEL', 'HEL', 'HEO', 'HLE', 'HLL', 'HLO', 'HLE', 'HLL', 'HLO', 'HOE', 'HOL', 'HOL', 'EHL', 'EHL', 'EHO', 'ELH', 'ELL', 'ELO', 'ELH', 'ELL','ELO', 'EOH', 'EOL', 'EOL', 'LHE', 'LHL', 'LHO', 'LEH', 'LEL', 'LEO', 'LLH', 'LLE', 'LLO', 'LOH', 'LOE', 'LOL', 'LHE', 'LHL', 'LHO', 'LEH', 'LEL', 'LEO', 'LLH', 'LLE', 'LLO', 'LOH', 'LOE', 'LOL', 'OHE', 'OHL', 'OHL', 'OEH', 'OEL', 'OEL', 'OLH', 'OLE', 'OLL', 'OLH', 'OLE', 'OLL']
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- vals:=một danh sách với tất cả các hoán vị có kích thước r từ s
- res:=một danh sách mới
- đối với mỗi x trong vals, thực hiện
- chuyển đổi danh sách các ký tự x thành chuỗi và chèn vào res
- trả lại res
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn
from itertools import permutations
def solve(s, r):
vals=list(permutations(s,r))
res=[]
for x in vals:
res.append(''.join(x))
return res
s = "HELLO"
r = 3
print(solve(s, r)) Đầu vào
"HELLO", 2
Đầu ra
['HEL', 'HEL', 'HEO', 'HLE', 'HLL', 'HLO', 'HLE', 'HLL', 'HLO', 'HOE', 'HOL', 'HOL', 'EHL', 'EHL', 'EHO', 'ELH', 'ELL', 'ELO', 'ELH', 'ELL', 'ELO', 'EOH', 'EOL', 'EOL', 'LHE', 'LHL', 'LHO', 'LEH', 'LEL', 'LEO', 'LLH', 'LLE', 'LLO', 'LOH', 'LOE', 'LOL', 'LHE', 'LHL', 'LHO', 'LEH', 'LEL', 'LEO', 'LLH', 'LLE', 'LLO', 'LOH', 'LOE', 'LOL', 'OHE', 'OHL', 'OHL', 'OEH', 'OEL', 'OEL', 'OLH', 'OLE', 'OLL', 'OLH', 'OLE', 'OLL']