我想比较两个向量。此向量表示两种选择:

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'

您可以将>=运算符应用于ab的每个元素,如下所示:

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/

10-16 06:11