我正在阅读有关袋鼠种族的代码;
它获得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]]
答案 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)
理论上,这种方法更快,因为它只需要对列表进行一次比较,但在我的(有限的)测试中,它只是略微如此。 (无论哪种方式,它可能是一个不成熟的优化。)我会让你弄清楚它是如何工作的;)。