0

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

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)

结果将是一个怪物。

4

5 回答 5

1

如果您想生成您描述的实际字符串,您可以通过两次join调用来完成

'\n'.join(' '.join(r) for r in b)

内部join连接每行的元素并用' '分隔它们,外部连接然后连接'\n'它们之间的行。您可以直接打印以上内容或将其存储在变量中

于 2015-08-18T17:12:05.250 回答
0

你只需要稍微格式化一下。用空格连接项目,并用换行符分隔它们。

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

或者:

for item in itertools.permutations(a,):
    print(' '.join(item))
于 2015-08-18T17:08:10.473 回答
0

只需解压缩返回的元组itertools.permutations(a,)和一个for循环:

import itertools
a = 'what are you doing to this cat?'.split()
for permutation in itertools.permutations(a,):
    print(*permutation)

在短语上使用.split()将更容易改变句子。

于 2015-08-18T17:08:52.277 回答
0

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')]
于 2015-08-18T17:15:40.187 回答
0

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

import itertools

a = ['car','boat','plane']
b = itertools.permutations(a)
s = '\n'.join((','.join(permutation) for permutation in b))
print(s)
于 2015-08-18T17:27:49.400 回答