为了账号安全,请及时绑定邮箱和手机立即绑定

如何获取排序数组的索引,除了 Python 中的某些值?

如何获取排序数组的索引,除了 Python 中的某些值?

吃鸡游戏 2021-12-08 16:16:22
我有一个数字列表:a=[6,8,1,0,5,0]并且我需要从原始列表中以升序排序获取索引列表,除了像这样的 0 个元素:index=[3,4,1,0,2,0]
查看完整描述

2 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

a = [6, 8, 1, 0, 5, 0]


sorted_positions = {x: i for i, x in enumerate(sorted(a))}

# {0: 1, 1: 2, 5: 3, 6: 4, 8: 5}


indices = [sorted_positions[x] for x in a]

# [4, 5, 2, 1, 3, 1]


zeroes = a.count(0)

# 2


answer = [

    0 if x == 0

    else i - zeroes + 1

    for i, x in zip(indices, a)

]

# [3, 4, 1, 0, 2, 0]

不认识语法时要搜索的术语:列表推导式、字典推导式和 python 三元运算符。


对于这种情况a=[3,3,1,1,2,2],这给出了[6, 6, 2, 2, 4, 4].


查看完整回答
反对 回复 2021-12-08
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

使用 numpy 的argsort为这个问题提供了一定的优雅


import numpy as np

a=[6,8,1,0,5,0]

#create a numpy array

temp = np.array(a) 

#assign non zero values in array with correct argsort indices.

temp[temp != 0] = np.argsort(temp[temp != 0]) + 1 

print(temp)

[3 4 1 0 2 0]


查看完整回答
反对 回复 2021-12-08
  • 2 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信