Генерация перестановок с повторениями

Я знаю о itertools, но кажется, что это может только генерировать перестановки без повторений.

Например, я хотел бы генерировать все возможные броски костей для 2 игр в кости. Таким образом, мне нужны все перестановки размера 2 из [1, 2, 3, 4, 5, 6] включая повторения: (1, 1), (1, 2), (2, 1)... и т.д.

Если возможный я не хочу реализовывать это с нуля

69
задан Georgy 9 August 2019 в 10:28
поделиться

1 ответ

В этом случае понимание списка не особенно необходимо.

, Учитывая [1 118]

import itertools as it


iter_ = range(1, 7)
r = 2

Код

list(it.product(iter_, repeat=r))
<час>

Детали

Неочевидно, Декартово произведение может генерировать подмножества перестановок. Однако из этого следует, что:

  • с заменой: можно произвести все перестановки n ** r через product
  • без замены: можно отфильтровать от последнего

Перестановки с заменой, n ** перестановки r

[x for x in it.product(iter_, repeat=r)]

без замены, n!

[x for x in it.product(iter_, repeat=r) if len(set(x)) == r]

# Equivalent
list(it.permutations(iter_, r))  
1
ответ дан 24 November 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: