如何在python中对条件进行排序

时间:2018-04-10 23:36:21

标签: python python-3.x list sorting

如何在python中构造具有条件的排序?假设我有一个列表

a: [-1, 3, 4, 2, -1, -1, 1, 0]

如何仅排序不是-1的元素? (作为回报:

[-1, 0, 1, 2, -1, -1, 3, 4] )

如何对其他所有元素进行排序? (作为回报:[-1, 3, -1, 2, 1, -1, 4, 0] ) 代码的语法是错误的,但它会与此类似吗?

result=sorted(a, key=lambda x: x!=-1,reverse=True)
result=sorted(a, key=lambda x: [::2],reverse=True)

2 个答案:

答案 0 :(得分:2)

您可以在对next的所有内容进行排序后使用iters

def sort_by(s, avoid = -1):
  sorted_vals = iter(sorted(filter(lambda x:x >= 0, s)))
  return [i if i == avoid else next(sorted_vals) for i in s]

print(sort_by([-1, 3, 4, 2, -1, -1, 1, 0]))

输出:

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

答案 1 :(得分:2)

如果向量化方法对您有兴趣,可以通过第三方库>/Applications/Python\ 3.6/Install\ Certificates.comman '/Applications/Python\' is not recognized as an internal or external command, operable program or batch file.

实现
numpy

对每个其他元素进行排序同样微不足道:

import numpy as np

a = np.array([-1, 3, 4, 2, -1, -1, 1, 0])

a[a!=-1] = np.sort(a[a!=-1])

# array([-1,  0,  1,  2, -1, -1,  3,  4])

相关:Why NumPy instead of Python lists?