目录
输入:arr = [37,12,28,9,100,56,80,5,12]输出:[5,3,4,2,8,6,7,1,3]
题目:数组序号转换
给你一个整数数组 arr ,请你将数组中的每个元素替换为它们排序后的序号。
序号代表了一个元素有多大。序号编号的规则如下:
序号从 1 开始编号。一个元素越大,那么序号越大。如果两个元素相等,那么它们的序号相同。
每个数字的序号都应该尽可能地小。
示例1:
输入:arr = [40,10,20,30]
输出:[4,1,2,3]
示例2:
输入:arr = [100,100,100]
输出:[1,1,1]
示例3:
输入:arr = [37,12,28,9,100,56,80,5,12]
输出:[5,3,4,2,8,6,7,1,3]
编程思路:
在网上参考了很多思路,在此表示感谢。在力扣上有对于应题:1331 。但对于学Python的孩子来说,题解都比较抽象。整体思路:
- 手工对原列表去重;
- 内置函数sort()或sorted()排序;不要污染原列表!
- 对排序后的列表元素和索引进行zip()操作,构建字典;(enumerate()或map()还没学到)
- 转换输出。
代码:
'''
给你一个整数数组 arr ,请你将数组中的每个元素替换为它们排序后的序号。
序号代表了一个元素有多大。
'''
li = input('请输入用逗号隔开的整数:').split(',')
#原列表去重
li_new = []
for i in li:
if i not in li_new:
li_new.append(i)
#对去重后的列表排序
li_new.sort()
#排序后的列表:索引和元素构建字典
ind_dic = dict(zip(li_new,range(len(li_new))))
#列表序号转换,以列表输出
seq =[]#接收序号列表
for i in range(len(li)):
seq.append(ind_dic[li[i]] + 1)
print(seq)