2013-02-03 122 views
0

我一直得到TypeError:不支持的操作数类型为+:'int'和'list' 所以我猜这个数组没有被索引?请协助。Python:通过数组传递函数并通过索引循环遍历值

def main(): 
    arr = [1, 2, 3, 4, 5] 
    length = len(arr) 
    maxAns = msa2(length, arr) 
    print maxAns 

def msa2(length, *arr): 
    maxThus = 0 
    for i in range(0, length): 
     sum = 0 
     for j in range(i, length): 
      sum = sum + arr[j]  # how to get value in index j 
      max(maxThus, sum) 
    return maxThus 

if __name__ == '__main__': 
    main() 

回答

3

您不应该使用*arr;删除*通配符,您的代码将工作。

以通配符,传递到msa2的说法被看作是潜在的更特别的位置参数之一,所以arrmsa2是这些参数列表,第一个元素是你传递的,当你叫msa2列表:

>>> def foo(*args): 
...  print args 
... 
>>> foo(1, 2, 3) 
(1, 2, 3) 
>>> foo([1, 2, 3]) 
([1, 2, 3],) 

您的功能也将始终返回0;你不会在任何地方更新maxThus。你可能意味着分配的max(maxThus, sum)maxThus结果:

maxThus = max(maxThus, sum) 
+0

真棒,所以通配符就像一个列表的列表。 Thx也修复了错误。投票有用。 – alexy99