Python itertools permutations如何包含重复字符

19

我有一些代码,如下:

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.....

如何使输出包括重复值的排列,例如112222

2个回答

48

你根本不需要排列。你需要的是笛卡尔积:

import itertools

def perm(n, seq):
    for p in itertools.product(seq, repeat=n):
        file.write("".join(p))
        file.write("\n")

perm(4, "0123")

12
您似乎正在寻找的是笛卡尔积,而不是排列,后者也由itertools提供。
您最好熟悉排列、组合、带替换的组合和笛卡尔积之间的区别,以决定哪种方法最适合您的应用程序,但很有可能,您正在寻找其他选项。

我也曾经这么想过一秒钟,但是原帖似乎想要012102两种情况--或者至少他在列表中没有评论--如果是这样的话,他可能需要使用itertools.product - DSM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接