【发布时间】:2019-10-02 11:17:23
【问题描述】:
我有一个函数,它接受关键字参数列表并根据关键字列表计算一堆结果,我正在使用 enumerate 来构造循环,以便输出包含所有结果的数据表。当参数列表大于一个但只传递一个参数时,一切都很好,枚举认为它想将该关键字拆分为单个字母。解决此问题的明显方法是只删除 enumerate 调用并使用计数器变量,但有什么方法可以使用 enumerate 函数来禁止这种行为?
下面是示例代码:
import numpy as np
import pandas as pd
x=np.array([1,2,3,4,5])
params = ("x**2","x**3","x**4")
chars = {
"x**2": lambda x: x**2,
"x**3": lambda x: x**3,
"x**4": lambda x: x**4
}
Matrix, names = np.zeros((x.shape[0], len(params)+1)), ["x"]
Matrix[:,0] = x[:]
for counter, param in enumerate(params, start=1):
Matrix[:,counter] = chars[param](x)
names.append(param)
panda_matrix = pd.DataFrame(Matrix)
panda_matrix.columns = names
print(panda_matrix)
但是当我只传递一个参数时,枚举认为它想把它分成一堆单独的字符。
Traceback (most recent call last):
File "C:\Users\1mike\PycharmProjects\libRL\example.py", line 41, in <module>
Matrix[:,counter] = chars[param](x)
KeyError: 'x'
Process finished with exit code 1
有什么办法吗?
【问题讨论】:
-
做一些类型检查。如果 params 不是元组,则将其变为一个。
-
那行得通。虽然我一直在玩它,发现如果用户输入参数,例如 ['x'] 或 {'x'} 而不是 ('x'),那么 python 会正确解释它。感谢您为我指明正确的方向!
标签: python pandas numpy enumerate