我想比较两个向量。这个向量代表两种选择:
def select_dominant(a,b):
comp=a>b
if(comp):
return a
elif(a<b):
return b
else:
return "indifferent"
a=[1,10,1]
b=[1,1,10]
print(select_dominant(a,b))
预计a和b应该“无关紧要”,因为a和b不能支配彼此。对于像a = [1,1,1] b = [1,1,2]这样的值,这个代码没有问题,因为b占主导地位。 因此,我希望从这个功能得到“无动于衷”的回报。我怎么能得到?
答案 0 :(得分:4)
看起来您想要比较两个列表 elementwise 。如果全部
a
中的值大于或等于b
中的对应值
返回a
,如果小于或等于返回b
,则返回'indifferent'
。
您可以将>=
运算符应用于a
和b
的每个元素,如下所示:
In [247]: a = [1,10,1]
In [248]: b = [1,1,10]
In [249]: map(operator.ge, a, b)
Out[249]: [True, True, False]
您可以使用True
测试所有值是否为all
:
In [250]: all(map(operator.ge, a, b))
Out[250]: False
因此,如果你定义:
import operator
def select_dominant(a,b):
ge = all(map(operator.ge, a, b))
le = all(map(operator.le, a, b))
return a if ge else b if le else 'indifferent'
然后
In [242]: select_dominant([1,1,1], [1,1,2])
Out[242]: [1, 1, 2]
In [243]: select_dominant([1,1,2], [1,1,1])
Out[243]: [1, 1, 2]
In [244]: select_dominant([1,10,1], [1,1,10])
Out[244]: 'indifferent'
表达式
a if ge else b if le else 'indifferent'
是所谓的conditional expression。
这是生成与此代码分配给value
的相同值的简便方法:
if ge:
value = a
elif le:
value = b
else:
value = 'indifferent'