17

可能重复:
一组python的幂集和笛卡尔积

使用 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 这样的输出?

据我了解,组合不是特定于排列的顺序。我正在寻找的是找到所有组合,然后是每个组合的每个排列。这可能吗?

4

2 回答 2

42

你根本不想要排列。你想要笛卡尔积:

import itertools

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

perm(4, "0123")
于 2012-12-22T22:07:42.343 回答
11

您似乎正在寻找的是笛卡尔积,而不是排列,它也由 itertools 提供。

您最好熟悉排列、组合、替换组合和笛卡尔积之间的区别,以确定最适合您的应用程序的方法,但很有可能,您正在寻找另一种选择。

于 2012-12-22T22:01:10.667 回答