我有一个函数,它获取关键字参数列表,并根据关键字列表计算一组结果,我使用enumerate来构造循环,以便输出一个包含所有结果的数据表。当参数列表大于1时,一切都很好,但当只传递单个参数时,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)
但当我只传递一个参数时,enumerate认为它希望将其拆分为一组单独的字符。你知道吗
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
有办法吗?你知道吗
正如您所发现的,
('x')
看起来可能是一个元组,但实际上不是。('x',)
是一个元组,'x',
是一个元组。。。但是期望你的用户知道这似乎是不合理的。你知道吗将事物转换为元组的建议是好的,但是要小心:
tuple('ab')
是('a', 'b')
,所以您回到了原点。但是您可以检查params
是否是一个带有isinstance(params, str)
的字符串,如果是,则进行处理:还有另一种方法,但可能更好,也可能不更好。NumPy有一个方便的函数
atleast_1d()
,它检查数组是否至少有一个维度。也许杀伤力太大了,但很高兴知道:您总是可以将其转换回具有
tuple()
的元组。你知道吗相关问题 更多 >
编程相关推荐