Как превратить результат (в python) файла itertools.permutations ("0123456789") в список строк - PullRequest
5 голосов
/ 17 марта 2011

В Python я использую list(itertools.permutations("0123456789")) и получаю (как и ожидалось) список кортежей выделенных символьных строк.

Есть ли способ превратить этот результат в список строк без перебора всех 3628800 элементов?

Ответы [ 2 ]

5 голосов
/ 17 марта 2011

Если вы хотите сделать это без итерации по всему списку , но довольно лениво, если нужно, вы можете использовать itertools.imap:

itertools.imap(lambda x: "".join(x), itertools.permutations("0123456789"))

(обратите внимание, что я 'я не использую list() для результата permutations, поэтому он настолько ленив, насколько это возможно)

Или, как указано в комментариях, здесь также будет работать простое выражение генератора:

("".join(x) for x in itertools.permutations("0123456789"))

itertools.imap имеет дополнительное преимущество, заключающееся в возможности применять одну и ту же функцию к множеству итераций с удобным синтаксисом (просто добавляя их в качестве последующих аргументов), но это не является необходимым для этого конкретного использования, поскольку у нас есть только однаитерацию

1 голос
/ 17 марта 2011

Превращение в список повторяет все это. Вы можете превратить его в список со списком, который будет лучше, чем превратить его в список, а затем перебрать все элементы списка:

[''.join(item) for item in itertools.permutations('0123456789')]

Если вам не нужно заканчивать списком, достаточно выражения генератора (замените [] на ()).

...