Python Itertools 字符串排列

Posted

技术标签:

【中文标题】Python Itertools 字符串排列【英文标题】:Python Itertools permutations with strings 【发布时间】:2017-06-09 04:26:54 【问题描述】:

我想对字符串使用 itertools 排列,而不仅仅是字母。

import itertools
lst = list(permutations(("red","blue"),3))
#This returns []

我知道我可以这样做:

a = list(permutations(range(3),3))
for i in range(len(a)):
a[i] = list(map(lambda x: 'red' if x==0 else 'blue' if x==1 else 'green',a[i]))

编辑: 我想输入这个作为我的输入,然后把它作为我的输出

input: ("red","red","blue")

output:
[(’red’, ’red’, ’red’), (’red’, ’red’, ’blue’),\
(’red’, ’blue’, ’red’), (’red’, ’blue’, ’blue’), (’blue’, ’red’, ’red’), \
(’blue’, ’red’, ’blue’), (’blue’, ’blue’, ’red’), (’blue’, ’blue’, ’blue’)]

【问题讨论】:

您的预期输出是什么?您最初的想法对我来说看起来不错,它返回 [] 的原因是因为您在长度为 2 的列表中要求长度为 3 的排列 - 没有! 它非常适合置换字符串。但是,您不能以任何顺序从两个列表中获取三个元素。这就是为什么你得到空列表作为输出。 看起来像你想要的product 【参考方案1】:

您可以像这样尝试itertools.product

import itertools
lst = list(set(itertools.product(("red","red","blue"),repeat=3))) # use set to drop duplicates
lst

lst 将是:

[('red', 'blue', 'red'),
 ('blue', 'red', 'red'),
 ('blue', 'blue', 'red'),
 ('blue', 'blue', 'blue'),
 ('blue', 'red', 'blue'),
 ('red', 'blue', 'blue'),
 ('red', 'red', 'blue'),
 ('red', 'red', 'red')]

更新:

import itertools
lst = list(itertools.product(("red","blue"),repeat=3))
lst

输出:

[('red', 'red', 'red'),
 ('red', 'red', 'blue'),
 ('red', 'blue', 'red'),
 ('red', 'blue', 'blue'),
 ('blue', 'red', 'red'),
 ('blue', 'red', 'blue'),
 ('blue', 'blue', 'red'),
 ('blue', 'blue', 'blue')]

【讨论】:

如果我的输入只是 ['red' , 'blue'] 并且我想要相同的产品,我如何获得相同的输出?【参考方案2】:

您也可以使用来自itertools 模块的combinations 来做到这一点,例如以下示例:

from itertools import combinations 
final = list(set(combinations(("red","red","blue")*3, 3)))

print(final)

输出:

[('red', 'blue', 'red'),
 ('blue', 'red', 'red'),
 ('blue', 'blue', 'red'),
 ('blue', 'blue', 'blue'),
 ('blue', 'red', 'blue'),
 ('red', 'blue', 'blue'),
 ('red', 'red', 'blue'),
 ('red', 'red', 'red')]

【讨论】:

以上是关于Python Itertools 字符串排列的主要内容,如果未能解决你的问题,请参考以下文章

生成具有重复元素的列表排列

没有 itertools 的两个值的排列(使用递归!)

在 Python 中获取排列,itertools

python itertools模块实现排列组合

python中的排列组合

Python Itertools 仅排列字母和数字