我有一个数字列表: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].
慕的地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]
添加回答
举报
0/150
提交
取消