题目来源: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. 使用early stopping解决神经网络过拟合问题
  2. WINCE基于MC8630的3G模块的控制和加载
  3. Spring Ioc 源码分析(一)--Spring Ioc容器的加载
  4. hdu 4982 贪心构造序列
  5. python处理pdf提取指定数据_python从PDF中提取数据的示例
  6. Back Stub Period
  7. 计算机图形学Web前端笔记-定位并移动到指定坐标点(two.js理论及实现)
  8. BlockChain: 区块链入门课程 -- 区块链适用于移动性 分享和收费案例
  9. Python实战从入门到精通第四讲——数据结构与算法2之实现一个优先级队列
  10. 利用XP组策略加强机密数据安全
  11. ArrayList删除的问题
  12. activiti历史数据的查看
  13. 接收流信息---字符串
  14. 【系统集成项目管理工程师】—计算真题公式汇总及分析
  15. 美团面试-2016校园招聘
  16. 字符串百分号 c语言,C语言 输出百分号(%)的方法
  17. 方差公式初三_九年级同步数学公式:方差公式(3)
  18. 【图的表示】:如何存储微博、微信等社交网络中的好友关系?
  19. js实现深拷贝与浅拷贝
  20. 2021-08-12硬盘介绍和磁盘管理

热门文章

  1. 【读书笔记】高效能人士的七个习惯
  2. swoole-redis连接池的问题总结
  3. 8253(8254)计时/计数器简介
  4. linux驱动文件目录
  5. 快速掌握验证性因子分析
  6. 安装centos 7
  7. UC如被百度控股,手机qq浏览器改如何进攻和防守
  8. 计算机网络连接显示678是什么意思,网络连接错误678什么意思 网络连接错误678解决方法【图文】...
  9. 机器学习 (十五) 关联分析之Apriori算法
  10. 知情搜索(一)-启发法