对两个列表使用max函数有什么意义?

时间:2016-07-04 17:47:25

标签: python list

我正在阅读有关袋鼠种族的代码;
它获得x1 v1和x2 v2的输入。如图所示 我想弄清楚使用max(X,Y)和min(X,Y)的区别是什么;我们可以使用max(x1,x2)和min(x1,x2);
请帮我理解。

x1, v1, x2, v2 = map(int, raw_input().split())
X = [x1, v1]
Y = [x2, v2]
back = min(X, Y)
fwd = max(X, Y)
dist = fwd[0] - back[0]
while back[0] < fwd[0]:
    back[0] += back[1]
    fwd[0] += fwd[1]
    if fwd[0] - back[0] >= dist:
        break

print ["NO", "YES"][back[0] == fwd[0]]

1 个答案:

答案 0 :(得分:2)

默认情况下(没有可选的key参数),将列表传递到min / max会返回具有最大第一项的列表(即它比较索引{{ 1}})。 1 只是传入0 s只会返回更大的整数。对于这个特定的应用程序,传递列表是有意义的,因为未来计算需要具有较大x值的点(而不仅仅是较大的x值本身)。

1 实际上,它比这稍微复杂一点。它真正做的是:检查两个列表的索引0处的项目;如果一个大于/小于另一个返回具有更大/更小值的列表,否则如果它们相等,则转到索引1;如果它们也是相等的,它会移动到索引2,依此类推,直到找到值不相等的索引。

修改

我正在讨论是否在我的回答中包含这个,因为我认为它可能会使代码更加混乱,但是@Jon Clements刚刚将其添加为评论我将在此处包含它。

而不是:

int

你可以做到:

X = [x1, v1]
Y = [x2, v2]
back = min(X, Y)
fwd = max(X, Y)

理论上,这种方法更快,因为它只需要对列表进行一次比较,但在我的(有限的)测试中,它只是略微如此。 (无论哪种方式,它可能是一个不成熟的优化。)我会让你弄清楚它是如何工作的;)。