它看起来像你想比较两个名单元素。如果所有 在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]
而且你可以测试是否所有的值用all
是True
:
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'
根据应用程序,你可能需要对名单是相等的情况。 – zch
@unutbu,这是比较两个向量之间优势的最快方法吗? – Rodolphe
我不能告诉你什么是最快的,但在某些情况下,使用NumPy的'np.greater_equal'可能会更快 - 特别是如果数据已经在NumPy数组中,数组很大,或者如果您可以将数据安排在这种方式可以在大数组上调用'np.greater_equal' *一次,而不是多次调用'map(operator.ge,a,b)'。所以答案很大程度上取决于你的特定问题的细节。 – unutbu