我使用SciPy函数kruskal来研究统计数据库。 SciPy函数将许多列表作为参数:
from scipy.stats import kruskal
kruskal([1,2,3,4],[5,6,7,8])
(5.3333333333333286,0.020921335337794052)
kruskal([1,2,3,4],[5,6,7,8],[9,10,11,12])
(9.8461538461538467,0.007276706499332492)
(我只是在这里使用整数来显示数据点的位置 - 真正的数据点显然不是整数)
但是,如果我列出一个列表并尝试将其传递给kruskal函数,那么这不起作用
a=[[1,2,3,4],[5,6,7,8]]
>>> kruskal(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\scipy\stats\stats.py", line 4188, in kruskal
raise ValueError("Need at least two groups in stats.kruskal()")
ValueError: Need at least two groups in stats.kruskal()
经过一番研究后,我认为我已经确定了问题 - 论证必须是列表的元组,而不是列表列表,但这不起作用
kruskal(tuple(a))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\scipy\stats\stats.py", line 4188, in kruskal
raise ValueError("Need at least two groups in stats.kruskal()")
ValueError:stats.kruskal()
中至少需要两个组提前感谢任何输入。
答案 0 :(得分:0)
Python可以接受动态序列来传递几个参数,但是你必须明确地声明它。
这样做的语法是在你的argumetns列表前加上*
:
>>> a=[[1,2,3,4],[5,6,7,8]]
>>> kruskal(*a)
否则,Python可以预测,只会按照你的要求执行:传递你的一个对象(无论是列表列表,列表元组等等,它仍然是一个Python对象),作为位置参数到函数调用。
官方Python文档中有简要介绍,但在书籍和教程中有广泛的例证:https://docs.python.org/2/tutorial/controlflow.html#arbitrary-argument-lists