Mô-đun itertools
cung cấp ba chức năng cho tác vụ này. Cái đầu tiên trong số này—itertools.permutations[]
—lấy một tập hợp các mục và tạo ra một chuỗi các bộ sắp xếp lại tất cả các mục thành tất cả các hoán vị có thể [i. e. , nó xáo trộn chúng thành tất cả các cấu hình có thể]. Ví dụ
>>>
items
=
[
'a'
,
'b'
,
'c'
]
>>>
from
itertools
import
permutations
>>>
for
p
in
permutations
[
items
]:
..
[
p
]
...
['a', 'b', 'c']
['a', 'c', 'b']
['b', 'a', 'c']
['b', 'c', 'a']
['c', 'a', 'b']
['c', 'b', 'a']
>>>
Nếu bạn muốn tất cả các hoán vị có độ dài nhỏ hơn, bạn có thể đưa ra đối số độ dài tùy chọn. Ví dụ
>>>
for
p
in
permutations
[
items
,
2
]:
..
[
p
]
...
['a', 'b']
['a', 'c']
['b', 'a']
['b', 'c']
['c', 'a']
['c', 'b']
>>>
Sử dụng itertools.combinations[]
để tạo chuỗi kết hợp các mục được lấy từ đầu vào. Ví dụ
>>>
from
itertools
import
combinations
>>>
for
c
in
combinations
[
items
,
3
]:
..
[
c
]
...
['a', 'b', 'c']
>>>
for
c
in
combinations
[
items
,
2
]:
..
[
c
]
...
['a', 'b']
['a', 'c']
['b', 'c']
>>>
for
c
in
combinations
[
items
,
1
]:
..
[
c
]
...
['a',]
['b',]
['c',]
>>>
Đối với combinations[]
, thứ tự thực tế của các phần tử không được xem xét. Nghĩa là, tổ hợp
0 được coi là giống với>>>
for
p
in
permutations
[
items
,
2
]:
..
[
p
]
...
['a', 'b']
['a', 'c']
['b', 'a']
['b', 'c']
['c', 'a']
['c', 'b']
>>>
1 [không được sản xuất]>>>
for
p
in
permutations
[
items
,
2
]:
..
[
p
]
...
['a', 'b']
['a', 'c']
['b', 'a']
['b', 'c']
['c', 'a']
['c', 'b']
>>>
Khi tạo kết hợp, các mục đã chọn sẽ bị xóa khỏi bộ sưu tập các ứng cử viên có thể [i. e. , nếu
0 đã được chọn, thì nó sẽ bị loại khỏi xem xét]. Hàm>>>
for
p
in
permutations
[
items
,
2
]:
..
[
p
]
...
['a', 'b']
['a', 'c']
['b', 'a']
['b', 'c']
['c', 'a']
['c', 'b']
>>>
1 nới lỏng điều này và cho phép chọn cùng một mục nhiều lần. Ví dụ>>>
for
p
in
permutations
[
items
,
2
]:
..
[
p
]
...
['a', 'b']
['a', 'c']
['b', 'a']
['b', 'c']
['c', 'a']
['c', 'b']
>>>
>>>
for
c
in
combinations_with_replacement
[
items
,
3
]:
..
[
c
]
...
['a', 'a', 'a']
['a', 'a', 'b']
['a', 'a', 'c']
['a', 'b', 'b']
['a', 'b', 'c']
['a', 'c', 'c']
['b', 'b', 'b']
['b', 'b', 'c']
['b', 'c', 'c']
['c', 'c', 'c']
>>>
Công thức này chỉ thể hiện một số sức mạnh được tìm thấy trong mô-đun itertools
. Mặc dù bạn chắc chắn có thể tự mình viết mã để tạo ra các hoán vị và tổ hợp, nhưng làm như vậy có lẽ sẽ đòi hỏi nhiều hơn một chút suy nghĩ. Khi đối mặt với các vấn đề lặp lại có vẻ phức tạp, bạn nên xem xét itertools
trước tiên. Nếu vấn đề phổ biến, rất có thể đã có sẵn giải pháp