Hướng dẫn how do you implement a combination in python? - làm thế nào để bạn thực hiện một sự kết hợp trong python?

Python cung cấp các phương pháp trực tiếp để tìm hoán vị và kết hợp một chuỗi. Các phương pháp này có mặt trong gói itertools.

Permutation  

Đầu tiên nhập gói ITERTOOLS để thực hiện phương thức hoán vị trong Python. Phương thức này lấy một danh sách làm đầu vào và trả về một danh sách đối tượng các bộ dữ liệu có chứa tất cả các hoán vị trong một biểu mẫu danh sách. & Nbsp; & nbsp;
 

Python3

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
2
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
3
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
4
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
5

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
6
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
7
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
8
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
9
(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
1
(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
3
(1, 2)
(1, 3)
(2, 3)
4

(1, 2)
(1, 3)
(2, 3)
5
(1, 2)
(1, 3)
(2, 3)
6
(1, 2)
(1, 3)
(2, 3)
7
(1, 2)
(1, 3)
(2, 3)
8
(1, 2)
(1, 3)
(2, 3)
9

(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
1
(1, 2)
(1, 3)
(2, 3)
2

Output:  

(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)

Nó tạo ra n! hoán vị nếu độ dài của chuỗi đầu vào là n. & nbsp; nếu muốn & nbsp; để có được hoán vị có độ dài l sau đó thực hiện nó theo cách này. & nbsp; & nbsp;
If want  to get permutations of length L then implement it in this way. 
 

Python3

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
2
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
3
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
4
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
5

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
6
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
7
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
8
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
9
(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
1
(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
3
(1, 2)
(1, 3)
(2, 3)
4

(1, 2)
(1, 3)
(2, 3)
5
(1, 2)
(1, 3)
(2, 3)
6
(1, 2)
(1, 3)
(2, 3)
7
(1, 2)
(1, 3)
(2, 3)
8
(1, 2)
(1, 3)
(2, 3)
9

(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
1
(1, 2)
(1, 3)
(2, 3)
2

Output: 

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)

Nó tạo ra n! hoán vị nếu độ dài của chuỗi đầu vào là n. & nbsp; nếu muốn & nbsp; để có được hoán vị có độ dài l sau đó thực hiện nó theo cách này. & nbsp; & nbsp;

Combination  

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
6
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
7
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
8
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
9
(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
1
(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
3
(2, 1)
(2, 3)
(1, 3)
5
(1, 2)
(1, 3)
(2, 3)
1
(2, 1)
(2, 3)
(1, 3)
7
 

Python3

Nó tạo ra ncr * r! hoán vị Nếu độ dài của chuỗi đầu vào là n và tham số đầu vào là r.

Phương thức này lấy một danh sách và đầu vào r làm đầu vào và trả về một danh sách đối tượng các bộ dữ liệu chứa tất cả các kết hợp có thể có của độ dài r trong một biểu mẫu danh sách. & Nbsp; & nbsp;

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
2
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
3
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
4
(1, 1)
(1, 2)
(1, 3)
(2, 2)
(2, 3)
(3, 3) 
9

import itertools

sequence = [1, 2, 3]
itertools.combinations(sequence, 2)

# Expected result
# <itertools.combinations at 0x7fcbd25cc3b8>
0
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
7
import itertools

sequence = [1, 2, 3]
itertools.combinations(sequence, 2)

# Expected result
# <itertools.combinations at 0x7fcbd25cc3b8>
2
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
9
(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
1
(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
3
(2, 1)
(2, 3)
(1, 3)
5
(1, 2)
(1, 3)
(2, 3)
1
list(itertools.combinations(sequence, 2))

# Expected result
# [(1, 2), (1, 3), (2, 3)]
0

Output:  

(1, 2)
(1, 3)
(2, 3)

(1, 2)
(1, 3)
(2, 3)
5
(1, 2)
(1, 3)
(2, 3)
6
(1, 2)
(1, 3)
(2, 3)
7
(1, 2)
(1, 3)
(2, 3)
8
list(itertools.combinations(sequence, 2))

# Expected result
# [(1, 2), (1, 3), (2, 3)]
5
 

Python3

(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
1
list(itertools.combinations(sequence, 2))

# Expected result
# [(1, 2), (1, 3), (2, 3)]
8

1. Kết hợp được phát ra theo thứ tự sắp xếp từ vựng của đầu vào. Vì vậy, nếu danh sách đầu vào được sắp xếp, các bộ dữ liệu kết hợp sẽ được tạo theo thứ tự được sắp xếp. & Nbsp; & nbsp;

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
2
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
3
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
4
list(itertools.combinations(range(3), 2))

# Expected result
# [(0, 1), (0, 2), (1, 2)]
2

import itertools

sequence = [1, 2, 3]
itertools.combinations(sequence, 2)

# Expected result
# <itertools.combinations at 0x7fcbd25cc3b8>
0
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
7
import itertools

sequence = [1, 2, 3]
itertools.combinations(sequence, 2)

# Expected result
# <itertools.combinations at 0x7fcbd25cc3b8>
2
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
9
(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
1
(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
3
(2, 1)
(2, 3)
(1, 3)
5
(1, 2)
(1, 3)
(2, 3)
1
list(itertools.combinations(sequence, 2))

# Expected result
# [(1, 2), (1, 3), (2, 3)]
0

Output: 

(1, 2)
(1, 3)
(2, 3)

(1, 2)
(1, 3)
(2, 3)
5
(1, 2)
(1, 3)
(2, 3)
6
(1, 2)
(1, 3)
(2, 3)
7
(1, 2)
(1, 3)
(2, 3)
8
list(itertools.combinations(sequence, 2))

# Expected result
# [(1, 2), (1, 3), (2, 3)]
5
 

Python3

(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
1
list(itertools.combinations(sequence, 2))

# Expected result
# [(1, 2), (1, 3), (2, 3)]
8

1. Kết hợp được phát ra theo thứ tự sắp xếp từ vựng của đầu vào. Vì vậy, nếu danh sách đầu vào được sắp xếp, các bộ dữ liệu kết hợp sẽ được tạo theo thứ tự được sắp xếp. & Nbsp; & nbsp;

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
2
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
3
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
4
list(itertools.combinations(range(3), 2))

# Expected result
# [(0, 1), (0, 2), (1, 2)]
2

import itertools

sequence = [1, 2, 3]
itertools.combinations(sequence, 2)

# Expected result
# <itertools.combinations at 0x7fcbd25cc3b8>
0
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
7
import itertools

sequence = [1, 2, 3]
itertools.combinations(sequence, 2)

# Expected result
# <itertools.combinations at 0x7fcbd25cc3b8>
2
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
9
(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
1
(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
3
(2, 1)
(2, 3)
(1, 3)
5
(1, 2)
(1, 3)
(2, 3)
1
list(itertools.combinations(sequence, 2))

# Expected result
# [(1, 2), (1, 3), (2, 3)]
0

Output: 

(2, 1)
(2, 3)
(1, 3)

(1, 2)
(1, 3)
(2, 3)
5
(1, 2)
(1, 3)
(2, 3)
6
(1, 2)
(1, 3)
(2, 3)
7
(1, 2)
(1, 3)
(2, 3)
8
list(itertools.combinations(sequence, 2))

# Expected result
# [(1, 2), (1, 3), (2, 3)]
5
 

Python3

(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
1
list(itertools.combinations(sequence, 2))

# Expected result
# [(1, 2), (1, 3), (2, 3)]
8

1. Kết hợp được phát ra theo thứ tự sắp xếp từ vựng của đầu vào. Vì vậy, nếu danh sách đầu vào được sắp xếp, các bộ dữ liệu kết hợp sẽ được tạo theo thứ tự được sắp xếp. & Nbsp; & nbsp;

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
2
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
3
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
4
list(itertools.combinations(range(3), 2))

# Expected result
# [(0, 1), (0, 2), (1, 2)]
2

(1, 2)
(1, 3)
(2, 3)
0
(1, 2)
(1, 3)
(2, 3)
1
(1, 2)
(1, 3)
(2, 3)
2

Output:

(1, 1)
(1, 2)
(1, 3)
(2, 2)
(2, 3)
(3, 3) 

Nếu bạn muốn xem làm thế nào để tạo các kết hợp mà không có itertools trong Python, hãy nhảy đến & nbsp; phần này.

Kết hợp

Một sự kết hợp là một lựa chọn các yếu tố từ một bộ sao cho thứ tự không quan trọng. Giả sử chúng tôi có một danh sách & nbsp; ________ 148, 2-kết hợp của bộ này là & nbsp; ________ 149. Lưu ý rằng đơn đặt hàng không quan trọng. Khi chúng tôi có & nbsp; ________ 150 & nbsp; trong bộ, chúng tôi cũng không nhận được & nbsp; Theo mặc định, các kết hợp thường được xác định là BE & NBSP; không thay thế. Điều này có nghĩa là chúng tôi sẽ không bao giờ nhìn thấy & nbsp; ____ 152 & nbsp; - một khi 1 đã được rút ra, nó không được thay thế.without replacement. This means that we’ll never see 

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
52 – once the 1 has been drawn it is not replaced.

Bạn cũng có thể có kết hợp & nbsp; với sự thay thế. 2-kết hợp (có thay thế) của Danh sách & nbsp; ________ 148 & nbsp; là & nbsp; ________ 154. Trong trường hợp này, các con số được thay thế sau khi chúng rút ra.with replacement. The 2-combinations (with replacement) of the list 

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
48 are 
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
54. In this case, numbers are replaced after they’re drawn.

Có một lưu ý quan trọng trước khi chúng tôi nhảy vào việc triển khai hoạt động này trong Python. API kết hợp từ ITERTOOLS xử lý chỉ số danh sách là phần tử được rút ra. Điều này có nghĩa là bất kỳ sự khác có thể được đối xử như một tập hợp (vì tất cả các chỉ số là duy nhất). Nhưng điều quan trọng là phải nhận ra rằng nếu bạn vượt qua & nbsp; ____ 155, các yếu tố sẽ không bị hủy bỏ cho bạn. 2-kết hợp của & nbsp; ________ 155 & nbsp; theo API kết hợp itertools là & nbsp;

Cách tiếp cận

Kết hợp trong itertools

Nó rất dễ dàng để tạo ra các kết hợp trong Python với itertools. Sau đây tạo ra tất cả 2 kết hợp của Danh sách & NBSP; ________ 148:

import itertools

sequence = [1, 2, 3]
itertools.combinations(sequence, 2)

# Expected result
# <itertools.combinations at 0x7fcbd25cc3b8>

& Nbsp; ________ 159 & nbsp; hàm trả về một trình lặp. Đây là những gì bạn muốn nếu bạn có kế hoạch lặp qua các kết hợp. Nhưng bạn có thể chuyển đổi nó thành một danh sách nếu bạn muốn tất cả các kết hợp trong bộ nhớ:

list(itertools.combinations(sequence, 2))

# Expected result
# [(1, 2), (1, 3), (2, 3)]

Một thuộc tính hữu ích của chức năng & nbsp; Điều này có nghĩa là bạn có thể vượt qua các chuỗi lười biếng [1] & nbsp; trong:

list(itertools.combinations(range(3), 2))

# Expected result
# [(0, 1), (0, 2), (1, 2)]

Kết hợp với sự thay thế trong itertools

Nó cũng rất dễ dàng để tạo ra các kết hợp với sự thay thế:

list(itertools.combinations_with_replacement(sequence, 2))

# Expected result
# [(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]

Giao diện cho & nbsp; ________ 161 & nbsp; giống như & nbsp; ________ 159.

Kết hợp mà không có itertools

Thỉnh thoảng, bạn có thể muốn tạo ra các kết hợp mà không cần sử dụng itertools. Có thể bạn muốn thay đổi API một chút - giả sử, trả lại danh sách thay vì trình lặp hoặc bạn có thể muốn hoạt động trên một mảng numpy.

Theo mui xe, Python sử dụng việc triển khai C của thuật toán kết hợp. Nhưng tài liệu cung cấp một triển khai hữu ích & nbsp; Python & nbsp; bạn có thể sử dụng, sao chép ở đây để thuận tiện:

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
0

Sự kết hợp mà không cần thay thế (và không có itertools)

Các tài liệu Python cũng cung cấp cho chúng tôi việc triển khai & nbsp; ____ 161: ____ 161: ____ 161:

(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
1

Ghi chú

.