python列表从小到大排列&获取list中重复元素索引的办法

python列表从小到大排列&获取list中重复元素索引的方法

  • 遇到的问题:

将list中的数据从小到大排列,生成数据排列后的新列表,和其一一对应的索引值。

但是列表中有重复数据时,用for循环遍历的方式只能找到重复值中的第一个索引,生成的索引无法一一对应。

  • 解决办法:

生成一个copylist,获取重复数值索引时,在copylist中将已获取的重复值清零(下次查询索引,就查不到它,直接与此重复值相等的的后一个值)

import copy

a = [13,1,5,8,9,7,5,1,4,8,7,6,5,14,5,7,9,8,9] # 原始数据
a_copy = copy.deepcopy(a) # copy数据用于查询index
newa = [] # 创建排序后数据的容器
newa_index = [] 
while len(a) >= 1: #
    mina = min(a) # 因为是从小到大排序,所以找最小值
    newa.append(mina) # 找到后直接放入新容器
    idb = [i for i, x in enumerate(a_copy) if x == mina] #找最小值的索引
    if len(idb) == 1: # 如果此最值无重复,那么idb只返回一个值,但是是以list形式
        newa_index.append(idb[0]) # 将index放入新容器
    else: # 若idb返回值不是一个,说明此最小值有重复值
        newa_index.append(idb[0]) # 将第一个值的索引放入容器
        a_copy[idb[0]] = 0 # 将重复值中的第一个值赋0(如果要排序的列表中没有0,有0,就随便赋值一个排序列表中没有的数据)

    a.remove(mina) # 将排序列表中的最小值删除,以便下次寻找新的最小值
# 当排序列表最后只剩一个值时,停止循环
print(newa)
print(newa_index)
结果:

newa:[1, 1, 4, 5, 5, 5, 5, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 13, 14]

newa_index:[1, 7, 8, 2, 6, 12, 14, 11, 5, 10, 15, 3, 9, 17, 4, 16, 18, 0, 13]
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值