使用可变长度 python 函数参数时出现迭代问题

Problem with iterating when using variable length python function arguments

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而不仅仅是windows)。

我该如何解决这个问题?这是什么原因造成的?

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]))

从而查看您的数据。