Python 3.4.3 - 如何保存可用的 itertools.permutations 列表?

Python 3.4.3 - How to save a itertools.permutations list usable?

我已经尝试了很多解决方案来解决我的问题,但我还没有找到解决方案。

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

Space 单词之间,无逗号,每行 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)

结果会是怪物。

您只需稍微格式化一下即可。用 space 连接项目,并用换行符分隔它们。

print(*(' '.join(item) for item in itertools.permutations(a,)), sep='\n')

或者:

for item in itertools.permutations(a,):
    print(' '.join(item))

只需解压 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' 连接起来。可以直接打印上面的,也可以存到变量

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')]

您只需要对来自 itertools.permutations 的每条记录的每个元素使用“,”进行字符串连接,然后使用“\n”连接每条记录。这是一个生成器表达式:

import itertools

a = ['car','boat','plane']
b = itertools.permutations(a)
s = '\n'.join((','.join(permutation) for permutation in b))
print(s)