【问题标题】:how to sort with condition in python如何在python中按条件排序
【发布时间】:2018-09-20 16:51:17
【问题描述】:

如何在 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)

【问题讨论】:

    标签: python python-3.x list sorting


    【解决方案1】:

    如果您对矢量化方法感兴趣,可以通过第 3 方库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])
    

    对每个其他元素进行排序同样简单:

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

    相关:Why NumPy instead of Python lists?

    【讨论】:

      【解决方案2】:

      您可以在对s中所有正数的内容进行排序后使用nextiter

      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,这将不起作用。
      • @JingLi 我更新了解决方案,包括一个可以接收两个参数的函数:要排序的列表和要避免的值。
      猜你喜欢
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多