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 trường hợp của bạn, đây sẽ là
Để 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): . 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 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 1 are:
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ế):
. 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:
Nhưng để có Python tạo hoán vị, bạn có thể sử dụng 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 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 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 4:all combinations (also called the power set), you'll need to make multiple calls to 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 6 và vượt qua kích thước của đối tượng có thể lặp lại cho đối số 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 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. |