Python练习:站队顺序输出

本文介绍了一种基于队列的排序算法,该算法通过输入特定格式的二维列表,经过两次排序及插入操作,最终得到按指定规则排序的队列。文章详细解释了排序和插入过程,并提供了完整的Python代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习:站队顺序输出

平台:Python123.io

教师:嵩天

站队顺序输出

描述

有一群人站队,每人通过一对整数(h, k)来描述,其中h表示人的高度,k表示在此人前面队列中身高不小于此人的总人数。

实现一个算法输出这个队列的正确顺序。

 


输入格式

 

输入格式为二维列表,即 list[list[]]形式

外层list包含队列中全部的人,内层list为[h,k]格式,代表个人信息。

 

 

输出格式

输出格式为:list[list[int]]形式

与输入格式一样,需要按照队列顺序排列。

 

输入输出示例

 

 输入输出
示例 1
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

from operator import itemgetter
queue = eval(input())
 
queue.sort(key = itemgetter(1))
#print(queue)
queue.sort(key = itemgetter(0), reverse = True)
#print(queue)
 
output = []
for item in queue:
    output.insert(item[1], item)
    #print(output)
print(output)

将注释掉的几行也一起打印,方便分析

输入[[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]

输出

[[7, 0], [5, 0], [7, 1], [6, 1], [5, 2], [4, 4]]
[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
[[7, 0]]
[[7, 0], [7, 1]]
[[7, 0], [6, 1], [7, 1]]
[[5, 0], [7, 0], [6, 1], [7, 1]]
[[5, 0], [7, 0], [5, 2], [6, 1], [7, 1]]
[[5, 0], [7, 0], [5, 2], [6, 1], [4, 4], [7, 1]]
[[5, 0], [7, 0], [5, 2], [6, 1], [4, 4], [7, 1]]

 

可以发现代码中首先对列表进行两次排序:

第一次将每个子列表1号位升序排序,第二次将每个字列表0号位倒序排序。

两次排序后我们得到了[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]这个列表,

接下来处理这个列表的方法就是一个个按此列表的顺序,将子列表插入到空列表中,

我们可以发现,每次插入时,已有子列表的“高度”肯定不小于正在插入的这个子列表,因此我们只需要按子列表第二项的位置去插入,插入完成后即可获得所需列表。

 

参考:https://blog.youkuaiyun.com/weixin_41153216/article/details/80857646

参考:https://blog.youkuaiyun.com/Hello_Mr_X/article/details/80911344

参考:https://www.cnblogs.com/nju2014/p/5568139.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值