Python как распечатать атрибуты для itertools.permutations - PullRequest
0 голосов
/ 11 мая 2018

Я новичок в Python и пробую itertools:

import itertools as it
obj = it.permutations(range(4))
print(obj)
for perm in obj:
    print( perm )

Мой вопрос: Как просмотреть / распечатать все перестановки в obj напрямую без использования for цикла?

Что я пробовал: Я пытался использовать __dict__ и vars, как предложено в этой SO ссылке но оба не работают (первый, кажется, не существует для объекта, в то время как последний сгенерировал объект 'TypeError:' itertools.permutations 'не вызывается').

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

1 Ответ

0 голосов
/ 11 мая 2018

Просто приведите obj к list:

print(list(obj))

Это даст вам следующий результат:

[(0, 1, 2, 3), (0, 1, 3, 2), (0, 2, 1, 3), (0, 2, 3, 1), (0, 3, 1, 2), (0, 3, 2, 1), (1, 0, 2, 3), (1, 0, 3, 2), (1, 2, 0, 3), (1, 2, 3, 0), (1, 3, 0, 2), (1, 3, 2, 0), (2, 0, 1, 3), (2, 0, 3, 1), (2, 1, 0, 3), (2, 1, 3, 0), (2, 3, 0, 1), (2, 3, 1, 0), (3, 0, 1, 2), (3, 0, 2, 1), (3, 1, 0, 2), (3, 1, 2, 0), (3, 2, 0, 1), (3, 2, 1, 0)]

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

Видите ли, есть причина, по которой permutations возвращает генератор .Если вы не знакомы с этим шаблоном, я настоятельно рекомендую прочитать об этом.Короче говоря, обычно вы не хотите приводить такие вещи к list, если вам действительно не нужно, чтобы это было list (например, вы хотите получить доступ к элементам напрямую по индексу).В вашем случае, когда вам нужно печатать только перестановки, абсолютно ничего плохого в том, чтобы использовать цикл for.

Вот одна строка для печати одной перестановки в строке:

print('\n'.join(str(permutation) for permutation in obj))

Но опять же, простой цикл for, который вы уже используете, просто отлично.Помните, что просто лучше, чем сложное .

...