Использование функций комбинации и перестановки itertools для подсчета повторяющихся элементов - PullRequest
0 голосов
/ 17 февраля 2020

Мне нужно использовать модуль itertools, чтобы найти общее количество перестановок последовательности n элементов "O" с и "X" с. (n будет известной константой, но, пожалуйста, дайте свой ответ для n = 8). Например, если я должен был ввести 3, он должен вывести:

OOO
OOX
OXO
XOO
OXX
XXO
XOX
XXX

не обязательно в этом порядке. В настоящее время я использую itertools и его функции комбинации / permutations / комбинации_with_replacement для этого, но не могу понять, что если я дам ему массив с несколькими одинаковыми элементами, они будут одинаковыми. Чтобы найти комбинации, я прекрасно, я в настоящее время могу просто сделать:

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

, который выводит

('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')

Однако, когда я использую функцию перестановок, она различает равные элементы, делая должно быть 8 факторных времен 9 = 40320 раз 9 выходных кортежей, когда должно быть только 2 ^ 8 = 256 выходов. Может кто-нибудь, пожалуйста, помогите?

Спасибо!


РЕДАКТИРОВАТЬ: Мне также нужно на самом деле генерировать перестановки. НЕ ТОЛЬКО НАЙТИ ОБЩЕЕ ЧИСЛО ИХ.

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Вы должны использовать itertools.product(...) вместо:

from itertools import product

Res=list(product(["o", "x"], repeat=8))
1 голос
/ 17 февраля 2020

Вы можете использовать itertools.product с параметром repeat, чтобы получить желаемый результат:

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

Дает:

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

Для repeat=8 вы получить 256 результатов:

('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')
...