두 개의 목록을 비교하려는 것 같습니다.. 이하 복귀 b
는 달리 'indifferent'
를 반환하는 경우 경우 a
모든 값이, 그 후, 새 창 a
b
에 대응하는 값보다 크거나 같다.
는이 같은 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 배열에 있거나 배열이 큽니다. 또는 데이터를 배열 할 수있는 경우 'map (operator.ge, a, b) '를 여러 번 호출하는 대신 큰 배열에서'np.greater_equal' * once *를 호출하는 것과 같은 방식입니다. 따라서 답변은 특정 문제의 세부 사항에 달려 있습니다. – unutbu