You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何两种sort用法在按列表第二元素排序时会出现不同结果

两种排序合并写法的差异原因

两种写法的执行逻辑存在本质差异,小样本测试结果一致仅为巧合,大规模数据下结果不同是必然现象。

两种写法的逻辑区别

写法1逻辑错误,破坏原始配对关系

写法1先对end列表执行原地排序,这一步直接打乱了end中元素和对应位置start元素的原始配对关系,后续合并只是将原顺序的start元素,和排序后的end元素按位置强行拼接,得到的[start[x], end[x]]完全不是原始的配对组合。
示例代码:

end.sort()
for x in range(n):
    tmp.append([start[x],end[x]])

写法2逻辑正确,保留原始配对关系

写法2先将相同位置的start[x]和end[x]绑定为一个子列表,保证原始配对关系不会丢失,再统一按子列表的第二个元素排序,排序过程中每个子列表的两个元素始终是一一对应的。
示例代码:

for x in range(n):
    tmp.append([start[x],end[x]])
tmp.sort(key=lambda x:x[1])

小样本测试结果一致的原因

你给出的测试用例中,原始end数组[2,4,6,7,9,9]本身就是天然升序排列的,调用end.sort()没有改变end数组的元素顺序,所以两种写法的结果刚好重合,属于特殊情况,不具备通用性。

差异验证反例

我们用一组简单的非升序end数组测试即可看到明显差异:
输入:

start = [3,1]
end = [4,2]

写法1输出:

[[3, 2], [1, 4]]

写法2输出:

[[1, 2], [3, 4]]

可以看到两种写法的结果完全不同,核心原因就是写法1破坏了原始的配对关系。

内容的提问来源于stack exchange,提问作者Pratyush Arora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:15:04