Python练习题——站队顺序输出
题目来源:Python语言程序设计(中国大学MOOC)
题目描述:
有一群人站队,每人通过一对整数(h, k)来描述,其中h表示人的高度,k表示在此人前面队列中身高不小于此人的总人数。
实现一个算法输出这个队列的正确顺序。
输入格式:
输入格式为二维列表,即 list[list[]]形式
外层list包含队列中全部的人,内层list为[h,k]格式,代表个人信息。
输出格式:
输出格式为:list[list[int]]形式
与输入格式一样,需要按照队列顺序排列。
示例:
输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
代码:
# inputls = eval(input())
inputls = [[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]]
sortls = sorted(inputls) #将输入列表从小到大排序
num = len(sortls)
indexls = list(range(num)) #初始化一个列表记录输出列表的索引值
output = list(range(num)) #初始化输出列表,设定列表长度
pops = [] #存放循环中需要从indexls中删除的索引值
for x in range(num):k = sortls[x][1]index = indexls[k]output[index] = sortls[x]if x < num-1 and sortls[x][0] == sortls[x+1][0]:pops.append(k)else:pops.append(k)for p in pops:indexls[p] = 'flag'while 'flag' in indexls:indexls.remove('flag')pops = []print(output)
总结:
- 思路大意是构造了n个有序位置(n为人数),然后把所有人一个一个地放到其中某一个固定的位置上,一旦放定便不会更改,因此下一个人可选位置的数量会不断减少。所以构造了indexls列表用来记录不断减少的可选位置对应的序号,还没有位置的人只能从indexls里剩下的序号中选择符合条件的位置。
- 按索引位置从列表中删除元素时,要注意剩下元素的索引会发生变化,当用循环一个一个删时很容易删错对象,这是一个需要注意的大坑。最终选择放弃按索引删除,取而代之的是先把要删除的元素变成了不同于其他数据的一个标记“flag”,然后再用remove()方法按元素进行删除。
- 总的来说,感觉这是一个比较笨拙的方法,可能一开始的思路就不太灵巧吧。
更新
方法二:先将输入列表按第二列顺序排列,再按第一列倒序排列,然后使用insert()方法构造输出列表。
input = [[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]]
sortls = sorted(input,key=(lambda x:x[1]))
#print(sortls)
sortlist = sorted(sortls,key=(lambda x:x[0]),reverse=True)
#print(sortlist)
output = []for item in sortlist:output.insert(item[1],item)print(output)
Python练习题——站队顺序输出相关推荐
- Python练习:站队顺序输出
练习:站队顺序输出 平台:Python123.io 教师:嵩天 站队顺序输出 描述 有一群人站队,每人通过一对整数(h, k)来描述,其中h表示人的高度,k表示在此人前面队列中身高不小于此人的总人数. ...
- python利用列表计算斐波那契数列前30项并输出_python 题目:斐波那契数列计算;题目:站队顺序输出;题目:合法括号组合的生成;题目:用户登录(三次机会)...
斐波那契数列计算 B 描述 斐波那契数列如下: F(0) = 0, F(1) = 1 F(n) = F(n-1) + F(n-2) 编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波 ...
- python从小到大的顺序输出-python从小到大的顺序输出
时间:2020-10-29 本页为您甄选多篇描写python从小到大的顺序输出,python从小到大的顺序输出精选,python从小到大的顺序输出大全,有议论,叙事 ,想象等形式.文章字数有400字. ...
- PYTHON#按照大小顺序输出三个数字
#按照大小顺序输出三个数字 n1 = int(input('n1 = :')) n2 = int(input('n2 = :')) n3 = int(input('n3 = ')) def swap( ...
- python从小到大的顺序输出_「小白专栏」Python中使用for循环,为什么输出结果不是按顺序?...
欢迎各位小哥哥小姐姐阅读本的文章,对大家学习有帮助,请点赞加关注哦!!!!!!!!!! 您的点赞和关注将是我持续更新的动力呢.^v^ 有不懂的问题可以私聊我哦! 前言 如图,为什么输出的不是按Jen, ...
- RUNOOB python练习题27 递归逆向输出字符串
用来练手的python练习题,原题链接: python练习实例27 题干: 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来. 实际要实现这个功能很简单,我们只需要反向遍历字符串即可.源代 ...
- python 读取文件到字典读取顺序_python_实现dictionary按照输入顺序输出
背景: 需要读取一个csv文件,并将其数据保存在dictionary中,并按照读文件的顺序输出,且不能引用第三方包,只能使用python自带模块.输出格式如下: 在使用python的dictionar ...
- RUNOOB python练习题 23 使用*号输出菱形
用来练手的python练习题,原题链接:python练习实例23 题干: 这个题目还是利用python字符串的乘法等性质,通过循环打印出我们想要的图形. 源代码如下: for i in range(4 ...
- python 两个浮点数按照从小到大顺序输出_PythonTip 50道题目(部分题解)
描述: 下过象棋的人都知道,马只能走'日'字形(包括旋转90°的日),现在想象一下,给你一个n行m列网格棋盘, 棋盘的左下角有一匹马,请你计算至少需要几步可以将它移动到棋盘的右上角,若无法走到,则输出 ...
最新文章
- gitlab安装各种坑
- 三角形的几何公式大全_数学老师精心整理:小学四年级公式大全,各个知识点逢考必有...
- 视频传输面临的挑战和解决之道
- bootstrap精简教程
- 五、Hashtable与HashMap的区别
- 万年5W充电头再见!2019新iPhone或将标配18W快充头
- SQA计划和系统测试规程
- Bailian4122 切割回文【DP】
- 【整理分享1】PHP中exit()与die()的区别
- 软件项目管理案例教程第四版答案
- 个人配置--常用软件保护色设置
- TQ2440开发板学习纪实(4)--- 初始化片外RAM,让程序有更大内存空间
- 保龄球计分c语言程序,保龄球的积分计分规则
- word排版快捷指令_在word文档中如何利用快捷键快速排版呢?
- cotex单片机寄存器(cm3为例)
- 材质允许png格式的图片透明
- 运动想象EEG背景知识
- GC参数解析 UseSerialGC、UseParNewGC、UseParallelGC、UseConcMarkSweepGC
- 永磁同步电机弱磁控制建模仿真
- 互联网最后一个绯闻女友出嫁 大众点评联姻腾讯