Hướng dẫn how does python calculate permutations with repetition? - làm thế nào để python tính toán hoán vị với sự lặp lại?

Bạn đang tìm kiếm sản phẩm Cartesian.

Trong toán học, một sản phẩm Cartesian [hoặc bộ sản phẩm] là sản phẩm trực tiếp của hai bộ.

Trong trường hợp của bạn, đây sẽ là {1, 2, 3, 4, 5, 6} x {1, 2, 3, 4, 5, 6}. itertools có thể giúp bạn ở đó:

import itertools
x = [1, 2, 3, 4, 5, 6]
[p for p in itertools.product[x, repeat=2]]
[[1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [2, 1], [2, 2], [2, 3], 
 [2, 4], [2, 5], [2, 6], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5], [3, 6], 
 [4, 1], [4, 2], [4, 3], [4, 4], [4, 5], [4, 6], [5, 1], [5, 2], [5, 3], 
 [5, 4], [5, 5], [5, 6], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6]]

Để có được một cuộn xúc xắc ngẫu nhiên [theo một cách hoàn toàn không hiệu quả]:totally inefficient way]:

import random
random.choice[[p for p in itertools.product[x, repeat=2]]]
[6, 3]

.

Nếu bạn là một danh sách, từ điển hoặc đối tượng có thể lặp lại khác của các giá trị mà bạn cần để tạo các kết hợp và hoán vị từ, Python có mô-đun itertools tích hợp như một phần của thư viện tiêu chuẩn của nó. Các hoán vị của một thứ khác là mọi thứ tự có thể có của tất cả các giá trị, trong khi các kết hợp là mọi lựa chọn có thể có của một số, không có hoặc tất cả các giá trị. Ví dụ: các hoán vị và kết hợp của tập hợp

import random
random.choice[[p for p in itertools.product[x, repeat=2]]]
[6, 3]
1 là:ordering of all of the values, while the combinations are every possible selection of some, none, or all of the values. For example, the permutations and combinations of the set
import random
random.choice[[p for p in itertools.product[x, repeat=2]]]
[6, 3]
1 are:

Hoán vịKết hợp
ABC, ACB, BAC, BCA, Cab[Không có], A, B, C, AB, AC, BC, ABC

Bạn cũng có thể sử dụng lại các giá trị nhiều lần, được gọi là hoán vị với sự lặp lại và kết hợp với sự lặp lại [còn được gọi là thay thế]:

Hoán vị với sự lặp lạiKết hợp với sự lặp lại
AAA, AAB, AAC, ABA, ABB, ABC, ACA, ACB, ACC, BAA, BAB, BAC, BBA, BBB, BBC, BCA, BCB, BCC, CAA, CAB, CAC, CBA, CBB, CBC, CBC, CCA, CCB, CCC[Không có], a, b, c, aa, ab, ac, bb, bc, cc, aaa, aab, aac, abb, abc, acc

.

Số lượng hoán vị và kết hợp nhanh chóng tăng lên khi nhiều giá trị được thêm vào đối tượng có thể lặp lại. Tổng số hoán vị và kết hợp được đưa ra sau:

Hoán vị của n giá trịKết hợp các giá trị n
Mà không có sự lặp lạiN!2^n
Với sự lặp lạin^n"2n chọn n", nghĩa là, [2n]! / [n!]^2

Nhưng để có Python tạo hoán vị, bạn có thể sử dụng

import random
random.choice[[p for p in itertools.product[x, repeat=2]]]
[6, 3]
2:

>>> import itertools
>>> for v in itertools.permutations[['A', 'B', 'C']]:
...   print[v]
...
['A', 'B', 'C']
['A', 'C', 'B']
['B', 'A', 'C']
['B', 'C', 'A']
['C', 'A', 'B']
['C', 'B', 'A']
>>>
>>> list[itertools.permutations[['A', 'B', 'C']]]
[['A', 'B', 'C'], ['A', 'C', 'B'], ['B', 'A', 'C'], ['B', 'C', 'A'], ['C', 'A', 'B'], ['C', 'B', 'A']]


>>> list[itertools.permutations[['A', 'B', 'C'], 2]]
[['A', 'B'], ['A', 'C'], ['B', 'A'], ['B', 'C'], ['C', 'A'], ['C', 'B']]
>>> list[itertools.permutations[['A', 'B', 'C'], 1]]
[['A',], ['B',], ['C',]]

Để có các kết hợp tạo python, bạn có thể sử dụng

import random
random.choice[[p for p in itertools.product[x, repeat=2]]]
[6, 3]
3:

>>> import itertools
>>> for v in itertools.combinations[['A', 'B', 'C'], 2]:
...   print[v]
...
['A', 'B']
['A', 'C']
['B', 'C']


>>> list[itertools.combinations[['A', 'B', 'C'], 1]]
[['A',], ['B',], ['C',]]
>>> list[itertools.combinations[['A', 'B', 'C'], 2]]
[['A', 'B'], ['A', 'C'], ['B', 'C']]
>>> list[itertools.combinations[['A', 'B', 'C'], 3]]
[['A', 'B', 'C']]

Lưu ý rằng hàm

import random
random.choice[[p for p in itertools.product[x, repeat=2]]]
[6, 3]
4 lấy đối số thứ hai cho số lượng giá trị được chọn.Để có được tất cả các kết hợp [còn được gọi là bộ sức mạnh], bạn sẽ cần thực hiện nhiều cuộc gọi đến
import random
random.choice[[p for p in itertools.product[x, repeat=2]]]
[6, 3]
4:all combinations [also called the power set], you'll need to make multiple calls to
import random
random.choice[[p for p in itertools.product[x, repeat=2]]]
[6, 3]
4:

>>> powerSet = []
>>> import itertools
>>> for k in range[4]:
...   powerSet.extend[itertools.combinations[['A', 'B', 'C'], k]]
...
>>> powerSet
[[], ['A',], ['B',], ['C',], ['A', 'B'], ['A', 'C'], ['B', 'C'], ['A', 'B', 'C']]

Để có được hoán vị với sự lặp lại/thay thế, hãy gọi

import random
random.choice[[p for p in itertools.product[x, repeat=2]]]
[6, 3]
6 và vượt qua kích thước của đối tượng có thể lặp lại cho đối số
import random
random.choice[[p for p in itertools.product[x, repeat=2]]]
[6, 3]
7 của nó:

>>> import itertools
>>> for v in itertools.product[['A', 'B', 'C'], repeat=3]:
...   print[v]
...
['A', 'A', 'A']
['A', 'A', 'B']
['A', 'A', 'C']
['A', 'B', 'A']
['A', 'B', 'B']
['A', 'B', 'C']
['A', 'C', 'A']
['A', 'C', 'B']
['A', 'C', 'C']
['B', 'A', 'A']
['B', 'A', 'B']
['B', 'A', 'C']
['B', 'B', 'A']
['B', 'B', 'B']
['B', 'B', 'C']
['B', 'C', 'A']
['B', 'C', 'B']
['B', 'C', 'C']
['C', 'A', 'A']
['C', 'A', 'B']
['C', 'A', 'C']
['C', 'B', 'A']
['C', 'B', 'B']
['C', 'B', 'C']
['C', 'C', 'A']
['C', 'C', 'B']
['C', 'C', 'C']
>>> list[itertools.product[['A', 'B', 'C'], repeat=3]]
[['A', 'A', 'A'], ['A', 'A', 'B'], ['A', 'A', 'C'], ['A', 'B', 'A'], ['A', 'B', 'B'], ['A', 'B', 'C'], ['A', 'C', 'A'], ['A', 'C', 'B'], ['A', 'C', 'C'], ['B', 'A', 'A'], ['B', 'A', 'B'], ['B', 'A', 'C'], ['B', 'B', 'A'], ['B', 'B', 'B'], ['B', 'B', 'C'], ['B', 'C', 'A'], ['B', 'C', 'B'], ['B', 'C', 'C'], ['C', 'A', 'A'], ['C', 'A', 'B'], ['C', 'A', 'C'], ['C', 'B', 'A'], ['C', 'B', 'B'], ['C', 'B', 'C'], ['C', 'C', 'A'], ['C', 'C', 'B'], ['C', 'C', 'C']]

Để có được sự kết hợp với sự lặp lại/thay thế, hãy gọi

import random
random.choice[[p for p in itertools.product[x, repeat=2]]]
[6, 3]
8:

>>> import itertools
>>> for v in itertools.combinations_with_replacement[['A', 'B', 'C'], 3]:
...   print[v]
...
['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']
>>> list[itertools.combinations_with_replacement[['A', 'B', 'C'], 3]]
[['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']]

Nếu bạn giống như tôi và bạn gặp khó khăn khi nhớ sự khác biệt giữa hoán vị và kết hợp, có và không có sự lặp lại, và các chức năng Python nào thực hiện chúng, hãy đánh dấu trang này để có quyền truy cập dễ dàng trong tương lai.

Bài Viết Liên Quan

Chủ Đề