算法--排序
排序
解题思路总结:
0. 排序可使用内置的 sorted() 或者 可迭代对象自带的sort()方法进行排序;
1. 注意输入时的字符串为str类型数字,需要转为int类型,否则会按字符编码值进行排序;
2. 如果排序时 两个条件的排序 方向不同时,可以在逆序的条件前添加负号,例如:
key=lambda x: (x[1], -x[2])
3. reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认);
【按身高和体重排队】
某学校举行运动会,学生们按编号(1、2、3…n)进行标识,现需要按照身高由低到高排列,对身高相同的人,按体重由轻到重排列;对于身高体重都相同的人,维持原有的编号顺序关系。请输出排列后的学生编号。
输入描述:
两个序列,每个序列由n个正整数组成(0 < n <= 100)。第一个序列中的数值代表身高,第二个序列中的数值代表体重。
输出描述:
排列结果,每个数值都是原始序列中的学生编号,编号从1开始
示例1:
输入
4
100 100 120 130
40 30 60 50
输出
2 1 3 4
说明
输出的第一个数字2表示此人原始编号为2,即身高为100,体重为30的这个人。由于他和编号为1的人身高一样,但体重更轻,因此要排在1前面。
示例2:
输入
3
90 110 90
45 60 45
输出
1 3 2
说明
1和3的身高体重都相同,需要按照原有位置关系让1排在3前面,而不是3 1 2
def func():
num = int(input())
high_list = input().split(' ')
weight_list = input().split(' ')
high_list = [int(high) for high in high_list]
weight_list = [int(weight) for weight in weight_list]
st_info = list(zip(list(zip(high_list, weight_list)), [i + 1 for i in range(num)]))
st_info.sort(key=lambda x: x[0])
res = [str(st[1]) for st in st_info]
print(' '.join(res))
func()