Phương thức math.comb[]
trả về số cách chọn k kết quả không theo thứ tự từ n khả năng, không lặp lại, còn được gọi là kết hợp
Ghi chú. Các tham số được truyền trong phương thức này phải là số nguyên dương
cú pháp
Giá trị tham số
Tham sốMô tảBắt buộc. Số nguyên dương của các mục để chọn từkBắt buộc. Số nguyên dương của các mục để chọnGhi chú. Nếu giá trị của k lớn hơn giá trị của n thì kết quả sẽ trả về 0
Ghi chú. Nếu các tham số là âm, một ValueError xảy ra. Nếu các tham số không phải là số nguyên, TypeError sẽ xảy ra
Các kết hợp Python là sự lựa chọn của tất cả hoặc một phần của tập hợp các đối tượng mà không quan tâm đến thứ tự các đối tượng được chọn. Ví dụ: giả sử chúng ta có một bộ ba chữ cái. A, B và C. Chúng ta có thể hỏi có bao nhiêu cách để chọn hai chữ cái từ tập hợp đó. Mỗi lựa chọn có thể sẽ là một ví dụ về sự kết hợpkết hợp Python
Để tính toán các kết hợp trong Python, hãy sử dụng itertools. phương thức kết hợp []. itertools. Phương thức kết hợp [] lấy một trình vòng lặp làm đối số và trả về tất cả các kết hợp có thể có của các phần tử trong trình vòng lặp
Các tổ hợp Python cũng giống như Hoán vị ngoại trừ việc Không có tập hợp nào sẽ có cùng phần tử với tập hợp khác. Vì vậy, ví dụ: we có một danh sách gồm ba mục như ['android', 'iOS', 'Symbian' ] và nếu chúng ta chỉ chọn hai phần tử và tạo một tổ hợp, thì .
- ['android', 'iOS']
- ['android', 'Symbian']
- [‘iOS’, ‘Symbian’]
Ví dụ
Hãy lấy ví dụ bằng Ngôn ngữ Python và triển khai nó
# app.py from itertools import combinations def combine[arr, s]: return list[combinations[arr, s]] array = [21, 18, 19] set = 2 print[combine[array, set]]
Trong đoạn mã trên, trước tiên chúng tôi đã nhập đối tượng kết hợp từ mô-đun itertools
Sau đó, chúng tôi đã xác định một hàm gọi là combine[], hàm này sẽ trả về danh sách các kết hợp có thể có. Nó nhận một đối số và tạo ra sự kết hợp của những đối số đó
Trong ví dụ này, chúng tôi đang tạo một danh sách gồm 2 kết hợp
Xem đầu ra
Tính toán kết hợp của Tuple trong Python
Để tính toán các kết hợp của một từ điển trong Python, hãy sử dụng itertools. phương thức kết hợp []. Phương thức kết hợp [] lấy một từ điển làm đối số và trả về tất cả các kết hợp có thể có của các thành phần từ điển
Tổ hợp là sự lựa chọn các phần tử từ một tập hợp sao cho thứ tự không thành vấn đề. Giả sử chúng ta có một danh sách [1, 2, 3]
, 2 tổ hợp của tập hợp này là [[1, 2], [1, 3], [2, 3]]
. Lưu ý rằng thứ tự không quan trọng. Sau khi chúng ta có [1, 2]
trong tập hợp, chúng ta cũng không nhận được [2, 1]
. Theo mặc định, các kết hợp thường được xác định là không thay thế. Điều này có nghĩa là chúng ta sẽ không bao giờ nhìn thấy
list[itertools.combinations[sequence, 2]]
# Expected result
# [[1, 2], [1, 3], [2, 3]]
0 – một khi số 1 đã được rút ra, nó sẽ không bị thay thếBạn cũng có thể kết hợp với thay thế. 2 tổ hợp [có thay thế] của danh sách [1, 2, 3]
là
list[itertools.combinations[sequence, 2]]
# Expected result
# [[1, 2], [1, 3], [2, 3]]
2. Trong trường hợp này, các số được thay thế sau khi chúng được rút raCó một lưu ý quan trọng trước khi chúng ta bắt đầu triển khai thao tác này trong Python. API kết hợp từ itertools coi chỉ mục danh sách là phần tử được vẽ. Điều này có nghĩa là bất kỳ lần lặp nào cũng có thể được coi 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
list[itertools.combinations[sequence, 2]]
# Expected result
# [[1, 2], [1, 3], [2, 3]]
3, các yếu tố sẽ không bị trùng lặp cho bạn. 2 cách kết hợp của list[itertools.combinations[sequence, 2]]
# Expected result
# [[1, 2], [1, 3], [2, 3]]
3 theo API kết hợp itertools là list[itertools.combinations[sequence, 2]]
# Expected result
# [[1, 2], [1, 3], [2, 3]]
5phương pháp tiếp cận
Kết hợp trong itertools
Cực kỳ dễ dàng để tạo các kết hợp trong Python với itertools. Điều sau đây tạo ra tất cả 2 kết hợp của danh sách [1, 2, 3]
import itertools
sequence = [1, 2, 3]
itertools.combinations[sequence, 2]
# Expected result
#
Hàm
list[itertools.combinations[sequence, 2]]
# Expected result
# [[1, 2], [1, 3], [2, 3]]
7 trả về một trình vòng lặp. Đây là những gì bạn muốn nếu bạn định 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 hàm
list[itertools.combinations[sequence, 2]]
# Expected result
# [[1, 2], [1, 3], [2, 3]]
7 là nó lấy bất kỳ hàm lặp nào làm đối số đầu tiên. Điều này có nghĩa là bạn có thể chuyển các chuỗi lười biếng tronglist[itertools.combinations[range[3], 2]]
# Expected result
# [[0, 1], [0, 2], [1, 2]]
Kết hợp với thay thế trong itertools
Nó cũng rất dễ dàng để tạo kết hợp với 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 của
list[itertools.combinations[sequence, 2]]
# Expected result
# [[1, 2], [1, 3], [2, 3]]
9 giống với list[itertools.combinations[sequence, 2]]
# Expected result
# [[1, 2], [1, 3], [2, 3]]
7Kết hợp không có itertools
Thỉnh thoảng, bạn có thể muốn tạo 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 - chẳng hạn, trả về một danh sách thay vì một trình vòng lặp hoặc bạn có thể muốn thao tác trên một mảng NumPy
Về cơ bản, Python sử dụng triển khai C của thuật toán kết hợp. Tuy nhiên, tài liệu cung cấp thông tin hữu ích bạn có thể sử dụng, được sao chép lại ở đây để thuận tiện