简体   繁体   中英

Using itertools combination and permutation functions to count for repeated elements

I need to use itertools module to find the total number of permutations of an n element sequence of "O" s and "X" s. (n will be a known constant, but please give your answer for n=8). For example, if I was to enter 3, it should output:

OOO
OOX
OXO
XOO
OXX
XXO
XOX
XXX

not necessarily in that order. I am currently using itertools and its combinations/permutations/combinations_with_replacement functions to do this, but it can't seem to figure out that if I give it an array with multiple elements that are the same, that they are the same. To find combinations, I am great, I can currently just do:

comb = combinations_with_replacement(["O", "X"], 8)

which outputs

('O', 'O', 'O', 'O', 'O', 'O', 'O', 'O')
('O', 'O', 'O', 'O', 'O', 'O', 'O', 'X')
('O', 'O', 'O', 'O', 'O', 'O', 'X', 'X')
('O', 'O', 'O', 'O', 'O', 'X', 'X', 'X')
('O', 'O', 'O', 'O', 'X', 'X', 'X', 'X')
('O', 'O', 'O', 'X', 'X', 'X', 'X', 'X')
('O', 'O', 'X', 'X', 'X', 'X', 'X', 'X')
('O', 'X', 'X', 'X', 'X', 'X', 'X', 'X')
('X', 'X', 'X', 'X', 'X', 'X', 'X', 'X')

However, when I use the permutations function, it differentiates between equal elements, making there be 8 factorial times 9 = 40320 times 9 output tuples, when there should only be 2^8=256 outputs. Can someone please help?

Thanks!


EDIT: I also need to actually generate the permutations. NOT JUST FIND THE TOTAL NUMBER OF THEM.

You can use itertools.product with the repeat parameter to get the output you want:

for xos in itertools.product('OX', repeat=3):
    print(xos)

Gives:

('O', 'O', 'O')
('O', 'O', 'X')
('O', 'X', 'O')
('O', 'X', 'X')
('X', 'O', 'O')
('X', 'O', 'X')
('X', 'X', 'O')
('X', 'X', 'X')

For repeat=8 , you'll get 256 results:

('O', 'O', 'O', 'O', 'O', 'O', 'O', 'O')
('O', 'O', 'O', 'O', 'O', 'O', 'O', 'X')
('O', 'O', 'O', 'O', 'O', 'O', 'X', 'O')
('O', 'O', 'O', 'O', 'O', 'O', 'X', 'X')
('O', 'O', 'O', 'O', 'O', 'X', 'O', 'O')
('O', 'O', 'O', 'O', 'O', 'X', 'O', 'X')
('O', 'O', 'O', 'O', 'O', 'X', 'X', 'O')
('O', 'O', 'O', 'O', 'O', 'X', 'X', 'X')
('O', 'O', 'O', 'O', 'X', 'O', 'O', 'O')
('O', 'O', 'O', 'O', 'X', 'O', 'O', 'X')
('O', 'O', 'O', 'O', 'X', 'O', 'X', 'O')
('O', 'O', 'O', 'O', 'X', 'O', 'X', 'X')
('O', 'O', 'O', 'O', 'X', 'X', 'O', 'O')
('O', 'O', 'O', 'O', 'X', 'X', 'O', 'X')
('O', 'O', 'O', 'O', 'X', 'X', 'X', 'O')
('O', 'O', 'O', 'O', 'X', 'X', 'X', 'X')
('O', 'O', 'O', 'X', 'O', 'O', 'O', 'O')
('O', 'O', 'O', 'X', 'O', 'O', 'O', 'X')
('O', 'O', 'O', 'X', 'O', 'O', 'X', 'O')
('O', 'O', 'O', 'X', 'O', 'O', 'X', 'X')
('O', 'O', 'O', 'X', 'O', 'X', 'O', 'O')
('O', 'O', 'O', 'X', 'O', 'X', 'O', 'X')
('O', 'O', 'O', 'X', 'O', 'X', 'X', 'O')
('O', 'O', 'O', 'X', 'O', 'X', 'X', 'X')
('O', 'O', 'O', 'X', 'X', 'O', 'O', 'O')
('O', 'O', 'O', 'X', 'X', 'O', 'O', 'X')
('O', 'O', 'O', 'X', 'X', 'O', 'X', 'O')
('O', 'O', 'O', 'X', 'X', 'O', 'X', 'X')
('O', 'O', 'O', 'X', 'X', 'X', 'O', 'O')
('O', 'O', 'O', 'X', 'X', 'X', 'O', 'X')
('O', 'O', 'O', 'X', 'X', 'X', 'X', 'O')
('O', 'O', 'O', 'X', 'X', 'X', 'X', 'X')
('O', 'O', 'X', 'O', 'O', 'O', 'O', 'O')
('O', 'O', 'X', 'O', 'O', 'O', 'O', 'X')
('O', 'O', 'X', 'O', 'O', 'O', 'X', 'O')
('O', 'O', 'X', 'O', 'O', 'O', 'X', 'X')
('O', 'O', 'X', 'O', 'O', 'X', 'O', 'O')
('O', 'O', 'X', 'O', 'O', 'X', 'O', 'X')
('O', 'O', 'X', 'O', 'O', 'X', 'X', 'O')
('O', 'O', 'X', 'O', 'O', 'X', 'X', 'X')
('O', 'O', 'X', 'O', 'X', 'O', 'O', 'O')
('O', 'O', 'X', 'O', 'X', 'O', 'O', 'X')
('O', 'O', 'X', 'O', 'X', 'O', 'X', 'O')
('O', 'O', 'X', 'O', 'X', 'O', 'X', 'X')
('O', 'O', 'X', 'O', 'X', 'X', 'O', 'O')
('O', 'O', 'X', 'O', 'X', 'X', 'O', 'X')
('O', 'O', 'X', 'O', 'X', 'X', 'X', 'O')
('O', 'O', 'X', 'O', 'X', 'X', 'X', 'X')
('O', 'O', 'X', 'X', 'O', 'O', 'O', 'O')
('O', 'O', 'X', 'X', 'O', 'O', 'O', 'X')
('O', 'O', 'X', 'X', 'O', 'O', 'X', 'O')
('O', 'O', 'X', 'X', 'O', 'O', 'X', 'X')
('O', 'O', 'X', 'X', 'O', 'X', 'O', 'O')
('O', 'O', 'X', 'X', 'O', 'X', 'O', 'X')
('O', 'O', 'X', 'X', 'O', 'X', 'X', 'O')
('O', 'O', 'X', 'X', 'O', 'X', 'X', 'X')
('O', 'O', 'X', 'X', 'X', 'O', 'O', 'O')
('O', 'O', 'X', 'X', 'X', 'O', 'O', 'X')
('O', 'O', 'X', 'X', 'X', 'O', 'X', 'O')
('O', 'O', 'X', 'X', 'X', 'O', 'X', 'X')
('O', 'O', 'X', 'X', 'X', 'X', 'O', 'O')
('O', 'O', 'X', 'X', 'X', 'X', 'O', 'X')
('O', 'O', 'X', 'X', 'X', 'X', 'X', 'O')
('O', 'O', 'X', 'X', 'X', 'X', 'X', 'X')
('O', 'X', 'O', 'O', 'O', 'O', 'O', 'O')
('O', 'X', 'O', 'O', 'O', 'O', 'O', 'X')
('O', 'X', 'O', 'O', 'O', 'O', 'X', 'O')
('O', 'X', 'O', 'O', 'O', 'O', 'X', 'X')
('O', 'X', 'O', 'O', 'O', 'X', 'O', 'O')
('O', 'X', 'O', 'O', 'O', 'X', 'O', 'X')
('O', 'X', 'O', 'O', 'O', 'X', 'X', 'O')
('O', 'X', 'O', 'O', 'O', 'X', 'X', 'X')
('O', 'X', 'O', 'O', 'X', 'O', 'O', 'O')
('O', 'X', 'O', 'O', 'X', 'O', 'O', 'X')
('O', 'X', 'O', 'O', 'X', 'O', 'X', 'O')
('O', 'X', 'O', 'O', 'X', 'O', 'X', 'X')
('O', 'X', 'O', 'O', 'X', 'X', 'O', 'O')
('O', 'X', 'O', 'O', 'X', 'X', 'O', 'X')
('O', 'X', 'O', 'O', 'X', 'X', 'X', 'O')
('O', 'X', 'O', 'O', 'X', 'X', 'X', 'X')
('O', 'X', 'O', 'X', 'O', 'O', 'O', 'O')
('O', 'X', 'O', 'X', 'O', 'O', 'O', 'X')
('O', 'X', 'O', 'X', 'O', 'O', 'X', 'O')
('O', 'X', 'O', 'X', 'O', 'O', 'X', 'X')
('O', 'X', 'O', 'X', 'O', 'X', 'O', 'O')
('O', 'X', 'O', 'X', 'O', 'X', 'O', 'X')
('O', 'X', 'O', 'X', 'O', 'X', 'X', 'O')
('O', 'X', 'O', 'X', 'O', 'X', 'X', 'X')
('O', 'X', 'O', 'X', 'X', 'O', 'O', 'O')
('O', 'X', 'O', 'X', 'X', 'O', 'O', 'X')
('O', 'X', 'O', 'X', 'X', 'O', 'X', 'O')
('O', 'X', 'O', 'X', 'X', 'O', 'X', 'X')
('O', 'X', 'O', 'X', 'X', 'X', 'O', 'O')
('O', 'X', 'O', 'X', 'X', 'X', 'O', 'X')
('O', 'X', 'O', 'X', 'X', 'X', 'X', 'O')
('O', 'X', 'O', 'X', 'X', 'X', 'X', 'X')
('O', 'X', 'X', 'O', 'O', 'O', 'O', 'O')
('O', 'X', 'X', 'O', 'O', 'O', 'O', 'X')
('O', 'X', 'X', 'O', 'O', 'O', 'X', 'O')
('O', 'X', 'X', 'O', 'O', 'O', 'X', 'X')
('O', 'X', 'X', 'O', 'O', 'X', 'O', 'O')
('O', 'X', 'X', 'O', 'O', 'X', 'O', 'X')
('O', 'X', 'X', 'O', 'O', 'X', 'X', 'O')
('O', 'X', 'X', 'O', 'O', 'X', 'X', 'X')
('O', 'X', 'X', 'O', 'X', 'O', 'O', 'O')
('O', 'X', 'X', 'O', 'X', 'O', 'O', 'X')
('O', 'X', 'X', 'O', 'X', 'O', 'X', 'O')
('O', 'X', 'X', 'O', 'X', 'O', 'X', 'X')
('O', 'X', 'X', 'O', 'X', 'X', 'O', 'O')
('O', 'X', 'X', 'O', 'X', 'X', 'O', 'X')
('O', 'X', 'X', 'O', 'X', 'X', 'X', 'O')
('O', 'X', 'X', 'O', 'X', 'X', 'X', 'X')
('O', 'X', 'X', 'X', 'O', 'O', 'O', 'O')
('O', 'X', 'X', 'X', 'O', 'O', 'O', 'X')
('O', 'X', 'X', 'X', 'O', 'O', 'X', 'O')
('O', 'X', 'X', 'X', 'O', 'O', 'X', 'X')
('O', 'X', 'X', 'X', 'O', 'X', 'O', 'O')
('O', 'X', 'X', 'X', 'O', 'X', 'O', 'X')
('O', 'X', 'X', 'X', 'O', 'X', 'X', 'O')
('O', 'X', 'X', 'X', 'O', 'X', 'X', 'X')
('O', 'X', 'X', 'X', 'X', 'O', 'O', 'O')
('O', 'X', 'X', 'X', 'X', 'O', 'O', 'X')
('O', 'X', 'X', 'X', 'X', 'O', 'X', 'O')
('O', 'X', 'X', 'X', 'X', 'O', 'X', 'X')
('O', 'X', 'X', 'X', 'X', 'X', 'O', 'O')
('O', 'X', 'X', 'X', 'X', 'X', 'O', 'X')
('O', 'X', 'X', 'X', 'X', 'X', 'X', 'O')
('O', 'X', 'X', 'X', 'X', 'X', 'X', 'X')
('X', 'O', 'O', 'O', 'O', 'O', 'O', 'O')
('X', 'O', 'O', 'O', 'O', 'O', 'O', 'X')
('X', 'O', 'O', 'O', 'O', 'O', 'X', 'O')
('X', 'O', 'O', 'O', 'O', 'O', 'X', 'X')
('X', 'O', 'O', 'O', 'O', 'X', 'O', 'O')
('X', 'O', 'O', 'O', 'O', 'X', 'O', 'X')
('X', 'O', 'O', 'O', 'O', 'X', 'X', 'O')
('X', 'O', 'O', 'O', 'O', 'X', 'X', 'X')
('X', 'O', 'O', 'O', 'X', 'O', 'O', 'O')
('X', 'O', 'O', 'O', 'X', 'O', 'O', 'X')
('X', 'O', 'O', 'O', 'X', 'O', 'X', 'O')
('X', 'O', 'O', 'O', 'X', 'O', 'X', 'X')
('X', 'O', 'O', 'O', 'X', 'X', 'O', 'O')
('X', 'O', 'O', 'O', 'X', 'X', 'O', 'X')
('X', 'O', 'O', 'O', 'X', 'X', 'X', 'O')
('X', 'O', 'O', 'O', 'X', 'X', 'X', 'X')
('X', 'O', 'O', 'X', 'O', 'O', 'O', 'O')
('X', 'O', 'O', 'X', 'O', 'O', 'O', 'X')
('X', 'O', 'O', 'X', 'O', 'O', 'X', 'O')
('X', 'O', 'O', 'X', 'O', 'O', 'X', 'X')
('X', 'O', 'O', 'X', 'O', 'X', 'O', 'O')
('X', 'O', 'O', 'X', 'O', 'X', 'O', 'X')
('X', 'O', 'O', 'X', 'O', 'X', 'X', 'O')
('X', 'O', 'O', 'X', 'O', 'X', 'X', 'X')
('X', 'O', 'O', 'X', 'X', 'O', 'O', 'O')
('X', 'O', 'O', 'X', 'X', 'O', 'O', 'X')
('X', 'O', 'O', 'X', 'X', 'O', 'X', 'O')
('X', 'O', 'O', 'X', 'X', 'O', 'X', 'X')
('X', 'O', 'O', 'X', 'X', 'X', 'O', 'O')
('X', 'O', 'O', 'X', 'X', 'X', 'O', 'X')
('X', 'O', 'O', 'X', 'X', 'X', 'X', 'O')
('X', 'O', 'O', 'X', 'X', 'X', 'X', 'X')
('X', 'O', 'X', 'O', 'O', 'O', 'O', 'O')
('X', 'O', 'X', 'O', 'O', 'O', 'O', 'X')
('X', 'O', 'X', 'O', 'O', 'O', 'X', 'O')
('X', 'O', 'X', 'O', 'O', 'O', 'X', 'X')
('X', 'O', 'X', 'O', 'O', 'X', 'O', 'O')
('X', 'O', 'X', 'O', 'O', 'X', 'O', 'X')
('X', 'O', 'X', 'O', 'O', 'X', 'X', 'O')
('X', 'O', 'X', 'O', 'O', 'X', 'X', 'X')
('X', 'O', 'X', 'O', 'X', 'O', 'O', 'O')
('X', 'O', 'X', 'O', 'X', 'O', 'O', 'X')
('X', 'O', 'X', 'O', 'X', 'O', 'X', 'O')
('X', 'O', 'X', 'O', 'X', 'O', 'X', 'X')
('X', 'O', 'X', 'O', 'X', 'X', 'O', 'O')
('X', 'O', 'X', 'O', 'X', 'X', 'O', 'X')
('X', 'O', 'X', 'O', 'X', 'X', 'X', 'O')
('X', 'O', 'X', 'O', 'X', 'X', 'X', 'X')
('X', 'O', 'X', 'X', 'O', 'O', 'O', 'O')
('X', 'O', 'X', 'X', 'O', 'O', 'O', 'X')
('X', 'O', 'X', 'X', 'O', 'O', 'X', 'O')
('X', 'O', 'X', 'X', 'O', 'O', 'X', 'X')
('X', 'O', 'X', 'X', 'O', 'X', 'O', 'O')
('X', 'O', 'X', 'X', 'O', 'X', 'O', 'X')
('X', 'O', 'X', 'X', 'O', 'X', 'X', 'O')
('X', 'O', 'X', 'X', 'O', 'X', 'X', 'X')
('X', 'O', 'X', 'X', 'X', 'O', 'O', 'O')
('X', 'O', 'X', 'X', 'X', 'O', 'O', 'X')
('X', 'O', 'X', 'X', 'X', 'O', 'X', 'O')
('X', 'O', 'X', 'X', 'X', 'O', 'X', 'X')
('X', 'O', 'X', 'X', 'X', 'X', 'O', 'O')
('X', 'O', 'X', 'X', 'X', 'X', 'O', 'X')
('X', 'O', 'X', 'X', 'X', 'X', 'X', 'O')
('X', 'O', 'X', 'X', 'X', 'X', 'X', 'X')
('X', 'X', 'O', 'O', 'O', 'O', 'O', 'O')
('X', 'X', 'O', 'O', 'O', 'O', 'O', 'X')
('X', 'X', 'O', 'O', 'O', 'O', 'X', 'O')
('X', 'X', 'O', 'O', 'O', 'O', 'X', 'X')
('X', 'X', 'O', 'O', 'O', 'X', 'O', 'O')
('X', 'X', 'O', 'O', 'O', 'X', 'O', 'X')
('X', 'X', 'O', 'O', 'O', 'X', 'X', 'O')
('X', 'X', 'O', 'O', 'O', 'X', 'X', 'X')
('X', 'X', 'O', 'O', 'X', 'O', 'O', 'O')
('X', 'X', 'O', 'O', 'X', 'O', 'O', 'X')
('X', 'X', 'O', 'O', 'X', 'O', 'X', 'O')
('X', 'X', 'O', 'O', 'X', 'O', 'X', 'X')
('X', 'X', 'O', 'O', 'X', 'X', 'O', 'O')
('X', 'X', 'O', 'O', 'X', 'X', 'O', 'X')
('X', 'X', 'O', 'O', 'X', 'X', 'X', 'O')
('X', 'X', 'O', 'O', 'X', 'X', 'X', 'X')
('X', 'X', 'O', 'X', 'O', 'O', 'O', 'O')
('X', 'X', 'O', 'X', 'O', 'O', 'O', 'X')
('X', 'X', 'O', 'X', 'O', 'O', 'X', 'O')
('X', 'X', 'O', 'X', 'O', 'O', 'X', 'X')
('X', 'X', 'O', 'X', 'O', 'X', 'O', 'O')
('X', 'X', 'O', 'X', 'O', 'X', 'O', 'X')
('X', 'X', 'O', 'X', 'O', 'X', 'X', 'O')
('X', 'X', 'O', 'X', 'O', 'X', 'X', 'X')
('X', 'X', 'O', 'X', 'X', 'O', 'O', 'O')
('X', 'X', 'O', 'X', 'X', 'O', 'O', 'X')
('X', 'X', 'O', 'X', 'X', 'O', 'X', 'O')
('X', 'X', 'O', 'X', 'X', 'O', 'X', 'X')
('X', 'X', 'O', 'X', 'X', 'X', 'O', 'O')
('X', 'X', 'O', 'X', 'X', 'X', 'O', 'X')
('X', 'X', 'O', 'X', 'X', 'X', 'X', 'O')
('X', 'X', 'O', 'X', 'X', 'X', 'X', 'X')
('X', 'X', 'X', 'O', 'O', 'O', 'O', 'O')
('X', 'X', 'X', 'O', 'O', 'O', 'O', 'X')
('X', 'X', 'X', 'O', 'O', 'O', 'X', 'O')
('X', 'X', 'X', 'O', 'O', 'O', 'X', 'X')
('X', 'X', 'X', 'O', 'O', 'X', 'O', 'O')
('X', 'X', 'X', 'O', 'O', 'X', 'O', 'X')
('X', 'X', 'X', 'O', 'O', 'X', 'X', 'O')
('X', 'X', 'X', 'O', 'O', 'X', 'X', 'X')
('X', 'X', 'X', 'O', 'X', 'O', 'O', 'O')
('X', 'X', 'X', 'O', 'X', 'O', 'O', 'X')
('X', 'X', 'X', 'O', 'X', 'O', 'X', 'O')
('X', 'X', 'X', 'O', 'X', 'O', 'X', 'X')
('X', 'X', 'X', 'O', 'X', 'X', 'O', 'O')
('X', 'X', 'X', 'O', 'X', 'X', 'O', 'X')
('X', 'X', 'X', 'O', 'X', 'X', 'X', 'O')
('X', 'X', 'X', 'O', 'X', 'X', 'X', 'X')
('X', 'X', 'X', 'X', 'O', 'O', 'O', 'O')
('X', 'X', 'X', 'X', 'O', 'O', 'O', 'X')
('X', 'X', 'X', 'X', 'O', 'O', 'X', 'O')
('X', 'X', 'X', 'X', 'O', 'O', 'X', 'X')
('X', 'X', 'X', 'X', 'O', 'X', 'O', 'O')
('X', 'X', 'X', 'X', 'O', 'X', 'O', 'X')
('X', 'X', 'X', 'X', 'O', 'X', 'X', 'O')
('X', 'X', 'X', 'X', 'O', 'X', 'X', 'X')
('X', 'X', 'X', 'X', 'X', 'O', 'O', 'O')
('X', 'X', 'X', 'X', 'X', 'O', 'O', 'X')
('X', 'X', 'X', 'X', 'X', 'O', 'X', 'O')
('X', 'X', 'X', 'X', 'X', 'O', 'X', 'X')
('X', 'X', 'X', 'X', 'X', 'X', 'O', 'O')
('X', 'X', 'X', 'X', 'X', 'X', 'O', 'X')
('X', 'X', 'X', 'X', 'X', 'X', 'X', 'O')
('X', 'X', 'X', 'X', 'X', 'X', 'X', 'X')

You should use itertools.product(...) instead:

from itertools import product

Res=list(product(["o", "x"], repeat=8))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM