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

Python 对列表进行排序,但保留指定的值,python,arrays,sorting,Python,Arrays,Sorting,我需要使用numpy.argsort函数(或与之相同的代码),但忽略一个具体的值,例如-1,并将其保留在结果数组中 如果这是列表:[5,8,1,-1,2,4],我需要一个类似于[3,4,0,-1,1,2]的结果 如何操作?找到并删除要忽略的每个值,记住它们的位置。例如,在本例中,您可以将索引和值存储为ignore=(3,-1) 像往常一样对剩余的列表进行排序 重新插入缺少的元素:mylist.insert(忽略[0],忽略[1]) 这会让你动起来吗?找到并删除每个要忽略的值,记住它们的位置。例如

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

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


如何操作?

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

像往常一样对剩余的列表进行排序

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


这会让你动起来吗?

找到并删除每个要忽略的值,记住它们的位置。例如,在本例中,您可以将索引和值存储为
ignore=(3,-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
像往常一样对剩余的列表进行排序

重新插入缺少的元素:
mylist.insert(忽略[0],忽略[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)

对最后一个循环的一个改进:

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

我不明白你对“具体价值”的定义,你有没有试着存储它,用
-np.inf
替换它,然后把它改回来?我不明白你对“具体价值”的定义,你有没有试着存储它,用
-np.inf
替换它,然后把它改回来?多谢了,它符合你的想法。这里有一个非常简单的实现:非常感谢Prune,它符合您的想法。这里有一个非常幼稚的实现:您在这方面做得很好!我建议您在学习更多Python时,时不时地回到这段代码,看看您可以改进什么。我加了一个。你在这方面做得很好!我建议您在学习更多Python时,时不时地回到这段代码,看看您可以改进什么。我加了一个。