import itertools
A = [50, 60, 70]
B = [0.3, 0.1, 0.5, 0.4]
print [a + b for a, b in itertools.product(A, B)]
>> [50.3,50.1,50.5,50.4,60.3,60.1,60.5,60.4,70.3,70.1,70.5,70.4]
在上面的代码中,有没有办法只为每个a返回a + b的最小值?所以输出应该是:
[50.1,60.1,70.1]
请注意这是一个玩具示例,在实例中A和B是lat和lon值的列表,我计算它们之间的大圆距离
答案 0 :(得分:3)
是的,首先选择B的最小值,然后将其添加到A的每个元素。
b = min(B)
print([a + b for a in A])
答案 1 :(得分:1)
itertools.product
并不适合你的Great Circle任务,因为它将所有(A,B)对都集中到一个容器中,但是你希望将所有具有给定A值的对保持在一个子容器中-container所以你可以找到他们的最低要求。所以只需使用一对嵌套循环。如果需要,可以将其作为生成器表达式来计算嵌套在列表推导中的最小值,如下所示:
A = [50, 60, 70]
B = [0.3, 0.1, 0.5, 0.4]
f = lambda x, y: x + y
print [min(f(a,b) for b in B) for a in A]