我只是在玩一些代码,但它似乎有特定数量的变量硬编码。我想知道如何使用未知数量的变量。
以下是一个澄清的违规代码示例(它本身不起作用,只是从更大的代码库中取出来表明我的意思):
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循环中使用未知数量的变量(以及程序的其余部分?)
答案 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