我创建了一个函数,它使用两个列表中的两个值的减法,如下所示:
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的内置函数,可用于减去列表?
答案 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.*