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 字符串排列的主要内容,如果未能解决你的问题,请参考以下文章