在排序函数中使用 x % 2 == 0
对列表进行排序可能会导致不期望的结果,因为这个条件本身并不提供一个稳定的排序依据。x % 2 == 0
只是一个布尔表达式,它只能告诉我们一个数是偶数还是奇数,但并不能告诉我们这个数相对于其他数的大小。
当使用 x % 2 == 0
作为排序的关键字时,所有偶数会被认为是“相等”的,所有奇数也会被认为是“相等”的。这意味着排序算法无法区分两个偶数或两个奇数之间的大小关系,从而导致不稳定的排序结果。
为了避免这种情况,我们需要提供一个更详细的排序关键字。例如,我们可以先按奇偶性排序,然后在每个组内按数值大小排序。
def custom_sort(x):
# 先按奇偶性排序,偶数在前,奇数在后
# 然后在每个组内按数值大小排序
return (x % 2 == 0, x)
numbers = [3, 1, 2, 4, 7, 6, 5]
sorted_numbers = sorted(numbers, key=custom_sort)
print(sorted_numbers)
[2, 4, 6, 1, 3, 5, 7]
在这个例子中,custom_sort
函数返回一个元组,第一个元素是一个布尔值,表示数字是否为偶数(偶数为 True
,奇数为 False
)。由于 True
在布尔上下文中被视为大于 False
,所有偶数会排在奇数前面。第二个元素是数字本身,用于在偶数和奇数内部进行数值大小的排序。
这种方法适用于任何需要先按某种属性(如奇偶性)分组,然后在每个组内按另一种属性(如数值大小)排序的场景。
通过这种方式,我们可以确保排序结果是稳定且符合预期的。
领取专属 10元无门槛券
手把手带您无忧上云