Python 3.4.3 - Как сохранить список itertools.permutations для использования?
Я перепробовал много решений своей проблемы, но пока не нашел решения.
import itertools
a = ['car','boat','plane']
b = list(itertools.permutations(a,))
print(b)
Это дает этот список при печати.
[('car', 'boat', 'plane'), ('car', 'plane', 'boat'), ('boat', 'car', 'plane'), ('boat', 'plane', 'car'), ('plane', 'car', 'boat'), ('plane', 'boat', 'car')]
Но это не для меня. Мне нужно что-то подобное:
car boat plane
car plane boat
boat car plane
boat plane car
plane car boat
plane boat car
Пробел между словами, без запятой и 1 в строке.
Это был просто пример, потому что у меня есть фразы по 20 слов в каждом, и мне нужно сделать это с каждым.
Теперь просто реальный образец того, что я должен сделать.
import itertools
'phrase What are you doing to this cat?'
a = ['what','are','you','doing','to','this','cat?']
b = list(itertools.permutations(a,))
print(b)
Результатом станет монстр.
5 ответов
Просто распакуйте кортежи, возвращенные itertools.permutations(a,)
и for
цикл:
import itertools
a = 'what are you doing to this cat?'.split()
for permutation in itertools.permutations(a,):
print(*permutation)
С помощью .split()
на этой фразе будет легче менять предложение.
Если вы хотите получить ту фактическую строку, которую вы описали, вы можете сделать это с двумя join
звонки
'\n'.join(' '.join(r) for r in b)
Внутренний join
объединяет элементы каждой строки с ' '
отделяя их, внешнее соединение затем объединяет строки с '\n'
между ними. Вы можете распечатать вышеизложенное напрямую или сохранить в переменной
Вам просто нужно сделать строковое соединение с ',' для каждого элемента каждой записи из itertools.permutations, а затем соединить каждую запись вместе с '\n'. Вот оно с выражением генератора:
import itertools
a = ['car','boat','plane']
b = itertools.permutations(a)
s = '\n'.join((','.join(permutation) for permutation in b))
print(s)
pprint.pprint
часто полезно для проверки данных. Это не дает вам именно ту форму, которую вы хотите в этом случае, но она дает полезную форму.
Код:
import itertools
from pprint import pprint
a = ['car','boat','plane']
b = list(itertools.permutations(a,))
pprint(b)
Результат:
[('car', 'boat', 'plane'),
('car', 'plane', 'boat'),
('boat', 'car', 'plane'),
('boat', 'plane', 'car'),
('plane', 'car', 'boat'),
('plane', 'boat', 'car')]
Вам просто нужно немного отформатировать его. Соедините элементы пробелом и отделите их новой строкой.
print(*(' '.join(item) for item in itertools.permutations(a,)), sep='\n')
В качестве альтернативы:
for item in itertools.permutations(a,):
print(' '.join(item))