Python函数参数中的列表和元组

时间:2016-01-26 12:16:28

标签: python list scipy

我使用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()

中至少需要两个组

提前感谢任何输入。

1 个答案:

答案 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