使用python 2.5减去两个列表

时间:2011-09-13 14:02:55

标签: python

我创建了一个函数,它使用两个列表中的两个值的减法,如下所示:

     import sys,os
     import math

     c1 = [10]
     c2 = [5]
     d1 = [8]
     d2 = [4]


      x = d2 - c2 
      y = d1 - c1
      z = x*x
      w = y*y
      answer = sqrt(z + w)
      print answer

我的错误是:TypeError:不支持的操作数类型 - :'list'和'list'

如何克服由于两个列表之间无法减法而发生的错误,即在行d2-d1和c2-c1中?数学模块中是否有类似于sqrt的内置函数,可用于减去列表?

3 个答案:

答案 0 :(得分:2)

这是你想要做的吗?

import math

c = [10,5]
d = [8,4]
x = d[1] - c[1]
y = d[0] - c[0]
z = x*x 
w = y*y 

print math.sqrt(z+w)

答案 1 :(得分:1)

即使列表中只有一个项目,也不能像这样一次减去整个列表。你必须一次做一个。你可以在一个循环或地图中完成它。这是一张地图:

import operator.sub
map(operator.sub, d2, c2)
map(operator.sub, d1, c1)

答案 2 :(得分:1)

您正在使用一个元素列表;如果要专门执行该计算,只需删除大括号即可。我假设你确实有多值列表。一个合理的解决方案是组合map(),它将一个函数应用于一个或多个列表中的每个元素,以及operator模块中的一些函数,它们转换了许多python运算符(如{{ 1}}和+)进入函数。

首先,只需设置一些列表。

-

接下来,我们只需将您的每项操作替换为>>> import random >>> d1 = [random.randrange(10) for ignored in range(10)] >>> d2 = [random.randrange(10) for ignored in range(10)] >>> c1 = [random.randrange(10) for ignored in range(10)] >>> c2 = [random.randrange(10) for ignored in range(10)] >>> c1 [1, 1, 7, 5, 5, 7, 4, 0, 7, 2] >>> c2 [9, 2, 7, 7, 1, 1, 9, 3, 6, 8] >>> d1 [0, 3, 4, 8, 9, 0, 7, 1, 6, 5] >>> d2 [3, 9, 5, 2, 1, 9, 2, 7, 9, 5] 对相应map

的调用
operator.*