【问题标题】:Python — sorting with lambda (sanity check)Python — 使用 lambda 排序(健全性检查)
【发布时间】:2019-02-09 03:25:51
【问题描述】:

来自 Python 文档中关于使用 sort 方法的 lambdas:

>>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
>>> pairs.sort(key=lambda pair: pair[1])
>>> pairs
[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')] 

因此,请进行完整性检查以确认我正确理解了这一点: 此示例中的 lambda 接受一对(在本例中为元组)并按元组的第二个元素(或第二个值;我不确定命名法)进行排序。

由于第二个元素是字符串,因此排序会将“按字母顺序排列”的值排在最前面。因此,输出具有在集合顶部具有按字母顺序排列的第二个元素的元组。

我的理解正确吗?

【问题讨论】:

  • 是的,你是对的
  • 这个词是字典序 order
  • 我投票决定将此问题作为题外话结束,因为这是一个是/否的答案,并且已经提供了适当的答案。

标签: python


【解决方案1】:

没错。

key 函数在您正在排序的列表中的每个值上调用,排序顺序基于该调用的结果。字符串自然地按字典顺序排序(如您所说的“按字母顺序”),list.sort 默认按升序排序,因此您将按其第二个元素的升序字典顺序获得所有元组的列表。

请注意,这更常见的是使用 operator.itemgetter 便利函数。

from operator import itemgetter

my_list.sort(key=itemgetter(1))

【讨论】:

  • 我喜欢你的回答,虽然你在这里很松散地使用more commonly,但我看到很多人在这种情况下使用 lambda,你想使用 itemgetter 的原因是每次迭代都会调用 lambda ,因此每次迭代都会定义一个新函数,从而变慢。 see here
  • @Jaba itemgetter 更快、更清晰、功能更强大且使用广泛。我不确定你的挑剔是什么意思?根据我的经验,itemgetter(出于所有这些原因)比一次性 lambda 更常用。
  • 你说得对,我想这更像是对我看到人们使用 lambda 执行此类任务的频率的挑剔。不是在打架,我想这更像是对 OP 的评论。
【解决方案2】:

是的,理智得到证实。它对每对的第二个元素进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2020-12-24
    • 2015-04-10
    相关资源
    最近更新 更多