对列表进行排序,但保留指定值

时间:2018-08-23 20:53:12

标签: python arrays sorting

我需要使用numpy.argsort函数(或相同的代码),但忽略具体的值(例如 -1 ),并将其保存在结果数组中

如果这是列表:[5,8,1,-1,2,4],我需要类似[3,4,0,-1,1,2]的结果

我该怎么办?

2 个答案:

答案 0 :(得分:2)

找到并删除每个要忽略的值,并记住它们的位置。例如,在这种情况下,您可以将索引和值存储为ignore = (3, -1)

照常排序其余列表。

重新插入缺少的元素:mylist.insert(ignore[0], ignore[1])

这会让你动起来吗?

答案 1 :(得分:1)

mylist=[5,8,1,-1,2,4]
print 'mylist: ',mylist
ignored=[]
new_my_list=[]

for i in range(len(mylist)):
    if mylist[i]==-1:
        ignored.append((i,mylist[i]))
    else:
        new_my_list.append(mylist[i])

print 'new_my_list without -1: ',new_my_list

mylist_sorted=list(np.argsort(new_my_list))

print 'mylist_sorted: ',mylist_sorted

temp_orders=list(np.zeros(len(mylist_sorted)))
for fr in range(len(mylist_sorted)):
            idx=mylist_sorted[fr]
            temp_orders[idx]=fr

print 'temp_orders: ',temp_orders

for ig in range(len(ignored)):
    ig_add=ignored[ig]
    temp_orders.insert(ig_add[0], ig_add[1])

print 'new_my_list with -1: ',temp_orders

对最后一个循环的改进:

for ig_idx, ig_value in ignored):
    temp_orders.insert(ig_idx, ig_val)