Ярлык для всех возможных перестановок набора чисел для m цифр - PullRequest
0 голосов
/ 13 июня 2018

Я работал над конечным полем.Предположим, у меня есть простое число p=7.Итак, я получаю список q=[0,1,2,3,4,5,6].Теперь я хочу все возможные перестановки элементов множества q на 7 мест.Например, [1,1,1,4,6,3,1] является одной из возможных перестановок.Есть ли в Python встроенная команда для этого?На самом деле я работаю с большим полем, где P 127 (p=127).

1 Ответ

0 голосов
/ 13 июня 2018

Это не перестановки, потому что элементы повторяются, это больше похоже на продукт.

Вы можете использовать itertools.product в повторяющихся списках q (здесь для 3 элементов):

import itertools

q=[0,1,2]   # or q = list(range(3))

for z in itertools.product(*(q,)*len(q)):  # using arg unpacking like if it was (q,q,q)
    z = list(z) # to convert as list
    print(z)

печатает:

[0, 0, 0]
[0, 0, 1]
[0, 0, 2]
[0, 1, 0]
[0, 1, 1]
[0, 1, 2]
...snip...
[2, 2, 0]
[2, 2, 1]
[2, 2, 2]

для p=3 печатает 3**3 = 27 значения.Если p=127 хорошо ... звучит не разумно.

...