有可能引用未知数量的变量吗?

2024-04-25 09:07:25 发布

您现在位置: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循环(和程序的其余部分)中使用未知数量的变量你知道吗


Tags: 代码test功能示例target编码列表for
2条回答

既然可以通过*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

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

就因为我已经写过了,这里有一个使用*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

相关问题 更多 >