使用可变长度python函数参数时进行迭代的问题

时间:2019-12-10 20:58:23

标签: python python-3.x function variables args

def function1(self,*windows):
    xxx_per_win = [[] for _ in windows]

    for i in range(max(windows),self.file.shape[0]):
        for j in range(len(windows)): 
            zz = self.file['temp'][i-windows[j]:i].quantile(0.25)
            ...
            ...
            ...

o = classX(file)
windows = [3,10,20,40,80]
output = o.function1(windows)  

如果我运行上面的代码,则显示:

for i in range(max(windows),self.file.shape[0]):

TypeError: 'list' object cannot be interpreted as an integer

和:

zz = self.file['temp'][i-windows[j]:i].quantile(0.25)

TypeError: unsupported operand type(s) for -: 'int' and 'list'

仅当窗口长度可变时(即* windows而不仅仅是Windows),才会发生此问题(仅)。

该如何解决?是什么原因造成的?

1 个答案:

答案 0 :(得分:2)

max函数希望传递多个参数,而不是包含多个参数的元组。您的windows变量是一个元组。

所以,不是:

for i in range(max(windows),self.file.shape[0]):

执行此操作:

for i in range(max(*windows),self.file.shape[0]):

关于第二个错误,涉及以下行:

zz = self.file['temp'][i-windows[j]:i].quantile(0.25)
# TypeError: unsupported operand type(s) for -: 'int' and 'list'

好吧,您正在减去,并且抱怨您不能从整数中减去列表。而且由于我不知道windows[j]包含什么,所以我不能说是否有列表。但是,如果有,就不能。您尚未给我们提供一个可行的示例进行尝试。

我建议您做的是在代码中放入一些调试输出,例如:

print('i=%s, j=%s, windows[j]=%s' % (i, j, windows[j]))

然后查看您的数据是什么样的。