Python:使用函数中的列表打印结果

时间:2014-10-25 15:34:40

标签: python list

我的代码如下:

def function(r):

    r = 6
    c = 10
    p = 0
    h = 0
    ht = 0.2
    o = 0.5
    l = 7
    a= [1.0,2.0,3.0]
    ol = o * l * a

    pp = zeros(0)
    aa = zeros(0)
    cc = zeros(0)
    pp = append(pp,p)
    aa = append(aa,a)
    cc = append(cc,c)

    while p >= 0 and h < 9:
        h = h + ht
        p = p + ol * ht
        result = r * cc * ht

    return result

ans = function(r)
print ans

好。我不知道由于某种原因,这个程序给了我一个TypeError。我不知道这意味着什么。请告诉我我需要做出哪些改变才能摆脱这个错误并获得打印出来的东西。错误如下:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-23-f8ae1f1b5454> in <module>()
     25     return result
     26 
---> 27 ans = function(r)
     28 print ans

<ipython-input-23-f8ae1f1b5454> in function(r)
      9     l = 7
     10     a= [1.0,2.0,3.0]
---> 11     ol = o * l * a
     12 
     13     pp = zeros(0)

TypeError: can't multiply sequence by non-int of type 'float'

感谢。

2 个答案:

答案 0 :(得分:2)

看起来你要做的是在o之间乘以la。有两种方法可以做到:

  1. 列表理解
  2. 这显式遍历列表并修改每个值,创建一个新的列表对象。

    ol = [o*l*x for x in a]
    
    1. map(func, interable)
    2. 这种方法与理解隐含地做同样的事情;将func应用于iterable的每个条目。在这个例子中,我使用lambda函数作为func,但如果你愿意,可以去定义一个完整的函数

      ol = map(lambda x: o*l*x, a)
      

      大多数人更喜欢理解,因为他们更清晰,通常更快。这两种方法中的任何一种都应该解决您的TypeError,但您的代码将无法满足您的需求。

      您将append(pp,p)的回复分配给列表pp。这将使pp等于None,因为这就是函数返回的内容。 append()旨在改变列表,因此您应使用pp.append(p)p附加到pp

      的末尾

答案 1 :(得分:0)

由于您已经在使用numpy,因此最佳解决方案是将a转换为numpy数组。其余代码将按原样运行。

a= array([1.0,2.0,3.0])
ol = o * l * a  # Vectorized because numpy

这假设您在函数调用之前已经完成了from numpy import array