我想比较两个向量。此向量表示两种选择:
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占a的主导地位。
因此,我想从此函数获得“无所谓”的回报。我怎样才能得到?
最佳答案
看来您想按元素比较两个列表。我摔倒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'
关于python - 选择帕累托主导向量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27880627/