如何用含交换操作的for循环按子列表首元素对嵌套列表升序排序
用选择排序实现嵌套列表按首元素升序排列
嘿,我来帮你完善这个排序逻辑!你想要的其实是选择排序的实现思路——每次从未排序的部分里找到首元素最小的子列表,然后和当前位置的元素交换,一步步把列表排好序。
先给你补全并修正后的完整代码:
lst = [[5, 2], [4, 7], [3, 5]] # 外层循环:遍历每个需要确定元素的位置 for i in range(len(lst)): # 先假设当前位置的子列表是未排序部分里首元素最小的 smallest_idx = i # 内层循环:从当前位置的下一个元素开始,找首元素更小的子列表 for j in range(i + 1, len(lst)): # 对比子列表的首元素,更新最小元素的索引 if lst[j][0] < lst[smallest_idx][0]: smallest_idx = j # 交换当前位置和最小元素的位置,把最小元素放到当前位置 lst[i], lst[smallest_idx] = lst[smallest_idx], lst[i] print(lst) # 输出结果: [[3, 5], [4, 7], [5, 2]]
代码细节解释
- 外层循环从
0开始而不是1:这样我们才能把整个列表里首元素最小的子列表放到第一个位置(索引0),这是选择排序的核心步骤。 smallest_idx的作用:记录未排序区域里首元素最小的子列表的索引,一开始默认是当前遍历的位置i。- 内层循环从
i+1开始:因为i之前的元素已经是排好序的,不需要再对比。 - 交换操作:Python里可以直接用
a, b = b, a的方式快速交换两个元素的位置,不用额外的临时变量。
这样运行代码后,就能得到你想要的[[3,5],[4,7],[5,2]]啦!
内容的提问来源于stack exchange,提问作者clink
相关产品推荐
相关产品推荐

