2016-01-26 24 views
0

我使用SciPy函数kruskal来调查统计数据库。该SciPy的功能发生了一些列表作为参数:Python函数参数中的列表和元组

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)

(我只是用整数这里来显示,其中数据点将是 - 真正的数据点显然不是整数)

但是,如果我列出列表并尝试将它传递给krus KAL功能,这并不工作

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

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

+0

非常有帮助谢谢。 “用Python解压缩列表?”文章也非常有帮助。 – eoghanf