是否可以参考未知数量的变量?

时间:2012-02-08 00:36:10

标签: python

我只是在玩一些代码,但它似乎有特定数量的变量硬编码。我想知道如何使用未知数量的变量。

以下是一个澄清的违规代码示例(它本身不起作用,只是从更大的代码库中取出来表明我的意思):

def test(a,b,c,current_total):
    a_range = range(0, target_sum + 1, a)
    b_range = range(0, target_sum + 1, b)
    c_range = range(0, target_sum + 1, c)
    for i, j, k in itertools.product(a_range, b_range, c_range):
        if i + j + k == current_total:
            counter = counter +1

正如您所看到的,它有3个变量在代码中被引用,但如果它是一个更大的变量列表会怎样。例如,代替[1,2,3],它是[1,2,3,4,5,6..]

我知道我可以找到新列表中有多少变量(len(list)),但如果我知道列表中有N个变量,我该怎么做?有没有办法在for循环中使用未知数量的变量(以及程序的其余部分?)

2 个答案:

答案 0 :(得分:4)

虽然可以通过* args使用任意数量的参数,但为什么不简单地使用列表呢?我认为这更自然。就像是:。

def test(vs, target_sum, current_total):
    counter = 0
    vranges = [range(0, target_sum+1, v) for v in vs]
    for ivec in itertools.product(*vranges):
        if sum(ivec) == current_total:
            counter += 1
    return counter

[顺便说一句,请注意,这只是一个例子。如果你真的想要你给出的特定功能的结果,有更快的方法来计算它。]

答案 1 :(得分:1)

仅仅因为我已经写过,这是使用*args的解决方案:

>>> target_sum = 10
>>> counter = 0
>>> def test(current_total, *args):
...   global counter, target_sum
...   for t in itertools.product(*(range(0, target_sum + 1, x) for x in args)):
...     if sum(t) == current_total:
...       counter = counter + 1
... 
>>> test(10, 1, 2, 3)
>>> counter
14
>>> counter = 0
>>> test(10, 1, 2, 3, 4, 5, 6)
>>> counter
35