【python蓝桥杯初选*刷题】数组序号转换

目录

题目:数组序号转换

示例1:

示例2:

输入: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的孩子来说,题解都比较抽象。整体思路:

  1. 手工对原列表去重;
  2. 内置函数sort()或sorted()排序;不要污染原列表!
  3. 对排序后的列表元素和索引进行zip()操作,构建字典;(enumerate()或map()还没学到)
  4. 转换输出。

代码:

'''
    给你一个整数数组 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值