Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generating permutations with repetitions

I know about itertools, but it seems it can only generate permutations without repetitions.

For example, I'd like to generate all possible dice rolls for 2 dice. So I need all permutations of size 2 of [1, 2, 3, 4, 5, 6] including repetitions: (1, 1), (1, 2), (2, 1)... etc

If possible I don't want to implement this from scratch

like image 438
Bwmat Avatar asked Jun 23 '10 08:06

Bwmat


People also ask

Is repetition possible in permutation?

Permutations: order matters, repetitions are not allowed.

How do you make all permutations in Python?

In Python, we can use the built-in module itertools to get permutations of elements in the list using the permutations() function. However, we can also write your utility function to generate all permutations of a string. We can do this either recursively or iteratively.


1 Answers

You are looking for the Cartesian Product.

In mathematics, a Cartesian product (or product set) is the direct product of two sets.

In your case, this would be {1, 2, 3, 4, 5, 6} x {1, 2, 3, 4, 5, 6}. itertools can help you there:

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)] 

To get a random dice roll (in a totally inefficient way):

import random random.choice([p for p in itertools.product(x, repeat=2)]) (6, 3) 
like image 144
miku Avatar answered Sep 23 '22 12:09

miku