pat 乙类 1055 python

一、题目要求身高相同时,按名字字母升序排列。先按名字字母升序排列,再按身高降序排列

二、使用循环嵌套创建嵌套列表(矩阵),如果有多余的人,将多个0插入第一行

三、用左右两个索引值,向嵌套列表中添加名字

四、输入结果,每行最后一个名字后面没有空格

n,k = map(int,input().split())
students_list = []
for i in range(n):
    name,height = input().split()
    students_list.append([name,int(height)])
students_list.sort()                                  # 名字按字母升序排列
students_list.sort(key=lambda x:x[1],reverse=True)    # 身高降序排列
 
# 创建嵌套列表
m = n // k
last_m = n % k + m
result_list = [[0 for i in range(m)] for i in range(k)]
if last_m != m:
    for i in range(last_m-m):
        result_list[0].insert(0,0)

# 排队
for i in range(k):
    l = len(result_list[i])
    col_index = int(l/2+1)-1
    result_list[i][col_index] = students_list[0][0]
    students_list.pop(0)
    left_index = right_index = col_index
    while 1:
        if left_index > 0:
            left_index -= 1
            result_list[i][left_index] = students_list[0][0]
            students_list.pop(0)
        if right_index < l-1:
            right_index += 1
            result_list[i][right_index] = students_list[0][0]
            students_list.pop(0)
        else:
            break
for i in result_list:
        print(' '.join(i))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值