使用可变长度 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]))
从而查看您的数据。
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]))
从而查看您的数据。