Python 如何生成所有组合?

Python 如何生成所有组合?,python,python-3.x,Python,Python 3.x,我正在尝试制作一个python程序,该程序生成长度为L的n-1数字的所有组合: 我试过使用itertools,但没有用。我试图使它产生上面的输出,当我在终端中给它参数5 3时。我在用蟒蛇3。解释一下就好了。这是我的密码 import sys import itertools def comb(A,n,k,p,lo): stuff = [A, n, k,p,lo] return itertools.combinations(stuff, len(stuff) if __name

我正在尝试制作一个python程序,该程序生成长度为L的n-1数字的所有组合:

我试过使用itertools,但没有用。我试图使它产生上面的输出,当我在终端中给它参数5 3时。我在用蟒蛇3。解释一下就好了。这是我的密码

import sys
import itertools

def comb(A,n,k,p,lo):
    stuff = [A, n, k,p,lo]
    return itertools.combinations(stuff, len(stuff)

if __name__ == "__main__":
    d = len(sys.argv)>3
    n = int(sys.argv[1])
    k = int(sys.argv[2])
    A = []
    for i in range(k):
         A.append(0)
    if d: print("n:",n,"k:",k)
    comb(A,n,k,0,0)
printitertools.combinationsrangeintsys.argv[1],intsys.argv[2]

已编辑:按指出初始化输入

import sys
from itertools import combinations

if __name__ == "__main__":
    d = len(sys.argv)>3
    n = int(sys.argv[1])
    k = int(sys.argv[2])
    A = []
    for i in range(n):
        A.append(i)
    if d: 
        print("n:",n," k:",k)
    val = combinations(A, k)
    for i in val:
        print(i)

您不需要助手函数,我不认为这应该与python 3一起运行:

test.py 导入系统 进口itertools def printArrayinputArray: 打印“[”,strinputArray[1:-1],“]” def combarr,r: 输出=itertools.combinationsarr,r 对于输出中的x: 打印阵列 如果uuuu name uuuuu==\uuuuuuuu main\uuuuuuuu: arr=rangeintsys.argv[1] r=intsys.argv[2] 康巴尔,r 只需使用:python3 test.py 5 3

输出为:

[ 0, 1, 2 ] [ 0, 1, 3 ] [ 0, 1, 4 ] [ 0, 2, 3 ] [ 0, 2, 4 ] [ 0, 3, 4 ] [ 1, 2, 3 ] [ 1, 2, 4 ] [ 1, 3, 4 ] [ 2, 3, 4 ]
看起来你的缩进有点小,这使得你很难看到发生了什么。你现在得到的输出是什么?你在哪里打印combA,n,k,0,0为什么列表中有2个零?你为什么不能就这么做?组合rangen,L其中n是你的号码很糟糕,看起来在副本中搞砸了。我会改正的。什么是n-1数字?长度为L的数字是什么?n-1是它的发音。例如,5将生成所有组合0-4。L是组合列表的长度。它给了我一个编译错误。这就是我试图实现它的方式。它说str对象不能用作整数。def combA,n,k,p,lo:printitertools.combinationsrangesys.argv[1],sys.argv[2]您需要将参数转换为int-将sys.argv[1]替换为intsys.argv[1],并将argv[2]替换为sys.argv[1]。是的,很抱歉,我在电话上键入了,因此变得懒惰@Paul Cornelius是正确的@J.Doe,因为组合的结果是一个iterable,我们必须在它后面循环才能打印出来。此外,对于第一个参数,我们不能只发送intsys.argv[1],因为itertools.combines需要一个iterable来发送。我的最后一个问题是,如何将其打印为数组而不是字符串。主要是如何打印[]而不是?我认为您可以创建一个小助手函数,然后为每个小数组打印出特定的格式。我将使用它并为python3更新@J.Doe。您可以使用我添加的printArray函数谢谢。如何消除两侧的空白?