Python-使用字符串作为表达式(exec和eval不起作用)

时间:2018-10-16 01:12:29

标签: python scipy eval

我正在尝试使用scipy.stats.f_oneway()进行方差分析。无论什么意思,它都将array_like作为输入。

numpy: formal definition of "array_like" objects?

无论如何,当我手动输入要比较的数据时,它可以工作。例如,这有效: 输入:

list1 = [3,4,5,6]
list2 = [4,5,6,7]
list3 = [5,6,7,8]
sp.stats.f_oneway(list1, list2, list3)

输出:

F_onewayResult(statistic=2.3999, pvalue=0.1461)

但是,我想比较很多不同的列表,并希望在我的代码中动态比较它们。

这就是我想要的:

list1 = [3,4,5,6]
list2 = [4,5,6,7]
list3 = [5,6,7,8]
listOfLists = [list1, list2, list3]
sp.stats.f_oneway(listOfLists)

但是,f_oneway不喜欢这种输入格式。所以我在想,也许我可以使用循环创建一个字符串,然后将其解压缩以用作参数,如下所示:

list1 = [3,4,5,6]
list2 = [4,5,6,7]
list3 = [5,6,7,8]
listString = 'list1, list2, list3'
sp.stats.f_oneway(eval(listString))

但是,这不起作用。这使我相信此功能需要输入如下内容:

sp.stats.f_oneway(list1, list2, list3)

如何使用字符串提供f_oneway函数所需的输入?

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

sp.stats.f_oneway(*listOflists)

这将打开列表并放入3个单独的参数