【发布时间】:2019-09-26 11:55:36
【问题描述】:
这是作为练习的。我当然可以使用 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)
我得到的错误:
TypeError: '>' not supported between instances of 'tuple' and 'int'
这是意料之中的,因为我的 reduce 函数将一个元组插入到 int 数组中,而不是 2 个单独的整数。然后将元组与 int 进行比较...
有没有办法将 2 个数字插入到列表中,并且只对列表中的每个第二个数字运行该函数?还是一种使用 reduce() 交换数字的方法?
文档对reduce函数的描述很少,所以我现在没有想法。 https://docs.python.org/3/library/functools.html?highlight=reduce#functools.reduce
【问题讨论】:
-
有可能——一种方法是反复减少以找到最小值。
-
其他人已经展示了许多如何使用
reduce执行插入排序的方法。我想指出,如果你必须使用reduce,这个选择是很自然的,因为插入排序属于所谓的在线排序算法的范畴,这意味着它可以工作一个接一个地出现新值(它不需要知道所有值才能开始工作)。
标签: python python-3.x sorting