题目来源: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)

总结:

  1. 思路大意是构造了n个有序位置(n为人数),然后把所有人一个一个地放到其中某一个固定的位置上,一旦放定便不会更改,因此下一个人可选位置的数量会不断减少。所以构造了indexls列表用来记录不断减少的可选位置对应的序号,还没有位置的人只能从indexls里剩下的序号中选择符合条件的位置。
  2. 按索引位置从列表中删除元素时,要注意剩下元素的索引会发生变化,当用循环一个一个删时很容易删错对象,这是一个需要注意的大坑。最终选择放弃按索引删除,取而代之的是先把要删除的元素变成了不同于其他数据的一个标记“flag”,然后再用remove()方法按元素进行删除。
  3. 总的来说,感觉这是一个比较笨拙的方法,可能一开始的思路就不太灵巧吧。

更新

方法二:先将输入列表按第二列顺序排列,再按第一列倒序排列,然后使用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练习题——站队顺序输出相关推荐

  1. Python练习:站队顺序输出

    练习:站队顺序输出 平台:Python123.io 教师:嵩天 站队顺序输出 描述 有一群人站队,每人通过一对整数(h, k)来描述,其中h表示人的高度,k表示在此人前面队列中身高不小于此人的总人数. ...

  2. python利用列表计算斐波那契数列前30项并输出_python 题目:斐波那契数列计算;题目:站队顺序输出;题目:合法括号组合的生成;题目:用户登录(三次机会)...

    斐波那契数列计算 B 描述 斐波那契数列如下: F(0) = 0, F(1) = 1 F(n) = F(n-1) + F(n-2) 编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波 ...

  3. python从小到大的顺序输出-python从小到大的顺序输出

    时间:2020-10-29 本页为您甄选多篇描写python从小到大的顺序输出,python从小到大的顺序输出精选,python从小到大的顺序输出大全,有议论,叙事 ,想象等形式.文章字数有400字. ...

  4. PYTHON#按照大小顺序输出三个数字

    #按照大小顺序输出三个数字 n1 = int(input('n1 = :')) n2 = int(input('n2 = :')) n3 = int(input('n3 = ')) def swap( ...

  5. python从小到大的顺序输出_「小白专栏」Python中使用for循环,为什么输出结果不是按顺序?...

    欢迎各位小哥哥小姐姐阅读本的文章,对大家学习有帮助,请点赞加关注哦!!!!!!!!!! 您的点赞和关注将是我持续更新的动力呢.^v^ 有不懂的问题可以私聊我哦! 前言 如图,为什么输出的不是按Jen, ...

  6. RUNOOB python练习题27 递归逆向输出字符串

    用来练手的python练习题,原题链接: python练习实例27 题干: 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来. 实际要实现这个功能很简单,我们只需要反向遍历字符串即可.源代 ...

  7. python 读取文件到字典读取顺序_python_实现dictionary按照输入顺序输出

    背景: 需要读取一个csv文件,并将其数据保存在dictionary中,并按照读文件的顺序输出,且不能引用第三方包,只能使用python自带模块.输出格式如下: 在使用python的dictionar ...

  8. RUNOOB python练习题 23 使用*号输出菱形

    用来练手的python练习题,原题链接:python练习实例23 题干: 这个题目还是利用python字符串的乘法等性质,通过循环打印出我们想要的图形. 源代码如下: for i in range(4 ...

  9. python 两个浮点数按照从小到大顺序输出_PythonTip 50道题目(部分题解)

    描述: 下过象棋的人都知道,马只能走'日'字形(包括旋转90°的日),现在想象一下,给你一个n行m列网格棋盘, 棋盘的左下角有一匹马,请你计算至少需要几步可以将它移动到棋盘的右上角,若无法走到,则输出 ...

最新文章

  1. gitlab安装各种坑
  2. 三角形的几何公式大全_数学老师精心整理:小学四年级公式大全,各个知识点逢考必有...
  3. 视频传输面临的挑战和解决之道
  4. bootstrap精简教程
  5. 五、Hashtable与HashMap的区别
  6. 万年5W充电头再见!2019新iPhone或将标配18W快充头
  7. SQA计划和系统测试规程
  8. Bailian4122 切割回文【DP】
  9. 【整理分享1】PHP中exit()与die()的区别
  10. 软件项目管理案例教程第四版答案
  11. 个人配置--常用软件保护色设置
  12. TQ2440开发板学习纪实(4)--- 初始化片外RAM,让程序有更大内存空间
  13. 保龄球计分c语言程序,保龄球的积分计分规则
  14. word排版快捷指令_在word文档中如何利用快捷键快速排版呢?
  15. cotex单片机寄存器(cm3为例)
  16. 材质允许png格式的图片透明
  17. 运动想象EEG背景知识
  18. GC参数解析 UseSerialGC、UseParNewGC、UseParallelGC、UseConcMarkSweepGC
  19. 永磁同步电机弱磁控制建模仿真
  20. 互联网最后一个绯闻女友出嫁 大众点评联姻腾讯

热门文章

  1. Boosting和Bagging区别
  2. C#,深入浅出全接触
  3. 三维建模教程——概念版摩托车
  4. 唱歌如何更好听? KTV调音师帮你忙
  5. px、em、rem单位间的区别
  6. 洲际酒店集团加速布局粤港澳大湾区,与华侨城酒店集团达成合作
  7. linux 脚本含参,linux shell脚本文件的入参
  8. sklearn数据集分割方法汇总
  9. 【官宣】BSV工程师能力认证项目在CSDN推出线上学习平台
  10. 图片LSB隐写(java)