Есть ли способ в Python генерировать все перестановки списка без получения двух копий одного и того же списка (из-за идентичных элементов в списке).Перестановки, которые не повторяются python
Например, список ["вверх", "вверх"] должен генерировать только список ["вверх", "вверх"], а не дважды.
Другой пример [ "вверх", "вверх", "правый"] возвращает только:
["up", "up", "right"]
["up", "right", "up"]
["right", "up", "up"]
, а не следующее:
["up", "up", "right"]
["up", "right", "up"]
["right", "up", "up"]
["up", "up", "right"]
["up", "right", "up"]
["right", "up", "up"]
Например, этот сценарий не дает нужный список.
>>> import itertools
>>> a = list(itertools.permutations(["up","up","down"]))
>>> print a
[('up', 'up', 'down'), ('up', 'down', 'up'), ('up', 'up', 'down'), ('up', 'down', 'up'), ('down', 'up', 'up'), ('down', 'up', 'up')]
Примечание:, как я могу сделать это быстрее с большими списками размером 20 или больше?
Нет. Мне просто нужно знать, сколько различных перестановок для 20 взлетов и 20 спадов. Каков наилучший способ сделать это? Python перехватил мяч вместо 42: 34.20. Должен быть лучший способ сделать это. –
Ах. Мы называем это [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). По-видимому, ваш реальный вопрос: «Сколько четких кортежей существует с 20 взлетами и 20 падениями?» - это одна простая формула, не требующая Python, - но вместо того, чтобы спросить о вашей реальной проблеме, вы спросили: «Как мне создать длинный список перестановок быстрее?» – DSM
@DSM Что такое формула? Как вы решили 15, 15 для разных кортежей? –