是否可以对带有reduce的列表进行排序?

afa*_*f12 7 python sorting python-3.x

这是我做的练习。我当然可以通过使用sorted()或Python标准库中的其他方式对列表进行排序,但是在这种情况下我不能。我认为我只应该使用reduce()

from functools import reduce
arr = [17, 2, 3, 6, 1, 3, 1, 9, 5, 3]
sorted_arr = reduce(lambda a,b : (b,a) if a > b else (a,b), arr)
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

TypeError: '>' not supported between instances of 'tuple' and 'int'
Run Code Online (Sandbox Code Playgroud)

这是可以预期的,因为我的reduce函数将一个元组插入到int数组中,而不是2个单独的整数。然后将元组与一个整数进行比较...

有没有一种方法可以将2个数字插入列表,然后仅对列表中的第二个数字运行该函数?还是一种使用reduce()交换数字的方法?

文档对reduce函数几乎没有说什么,所以我现在没有想法。 https://docs.python.org/3/library/functools.html?highlight=reduce#functools.reduce

pau*_*ult 6

这是使用以下方法对列表进行排序的一种方法reduce

arr = [17, 2, 3, 6, 1, 3, 1, 9, 5, 3]
sorted_arr = reduce(
    lambda a, b: [x for x in a if x <= b] + [b] + [x for x in a if x > b],
    arr,
    []
)
print(sorted_arr)
#[1, 1, 2, 3, 3, 3, 5, 6, 9, 17]
Run Code Online (Sandbox Code Playgroud)

在每个步骤减少,建造一串接的所有值的列表小于新的输出列表或等于b[b]和所有的值的列表大于b。使用可选的第三个参数reduce将输出初始化为空列表。

  • 这是插入排序。 (4认同)
  • 这不是快速排序。 (3认同)