使用Python Itertools.permutations()我希望接收和输出具有重复字符的排列。举个例子,我的下面的函数及其当前输出。
def perm(n,i):
b = 0
while b < n:
n= n -1
from itertools import permutations as p
file.write('\n'.join([''.join(item) for item in p(i,n)]))
perm(4,'0123')
输出是:
012
013
021
023
031
032
102
103
120
123
130
132
201
203
210
213
230
231
301
302
310
312
320
321.....
我如何获得112或222的输出?
从我理解的组合不是特定于排列的特定顺序。我正在寻找的是找到所有组合然后每个组合的每个排列。这可能吗?
答案 0 :(得分:28)
你根本不想要排列。你想要笛卡尔积:
import itertools
def perm(n, seq):
for p in itertools.product(seq, repeat=n):
file.write("".join(p))
file.write("\n")
perm(4, "0123")
答案 1 :(得分:7)
您似乎要寻找的是Cartesian product,而不是排列,也是由itertools提供的。
您可能会熟悉排列,组合,替换组合和笛卡尔积之间的差异,以确定哪种方法最适合您的应用,但很有可能,您正在寻找其他选项。