【问题标题】:Sort a section of a list and a section of another对列表的一部分和另一个列表的一部分进行排序
【发布时间】:2017-08-11 14:28:57
【问题描述】:

当前列表:[['Magneto', 0, 'Insignificantly Evil'], ['Mystique', 0, 'Insignificantly Evil'], ['Mr. Sinister', 2, 'Cautiously Evil']]

我有上面的代码:我可以按列表的第二列对其进行排序,但是如果第二列相同,我需要帮助按第一列对其进行排序。所以上面列表的正确顺序是。

此列表应首先按数字(从高到低)排序,第一列(按字典顺序)打破平局。

最终名单:

[
  ('Mr. Sinister', 2, 'Cautiously Evil'),
  ('Magneto', 0, 'Insignificantly Evil'),
  ('Mystique', 0, 'Insignificantly Evil')
])

!注意第一列只有一部分是按字母顺序排序的,因为第一个是 2,所以它得到优先级!

请以任何形式或形式提出想法。

【问题讨论】:

标签: python-3.x


【解决方案1】:

我认为您需要将其转换为 list,因为您使用的是 python 3.x,但这会起作用:

a = [['Magneto', 0, 'Insignificantly Evil'], ['Mystique', 0, 'Insignificantly Evil'], ['Mr. Sinister', 2, 'Cautiously Evil']]
sorted(a, key=lambda x: (-x[1], x[0]))
#[['Mr. Sinister', 2, 'Cautiously Evil'],
# ['Magneto', 0, 'Insignificantly Evil'],
# ['Mystique', 0, 'Insignificantly Evil']]

lambda 是一个匿名函数,它接受参数 x 并返回带有负数的第二个元素和第一个元素的元组。

排序将按返回元组的第一个元素,然后是第二个元素。

默认排序是升序,所以负数会排在最前面。

【讨论】:

  • 您好,请您解释一下 lambda 部分:您如何同时对负 x 和其他内容进行排序,这甚至意味着什么?
  • 你也不需要 if else 语句
  • 编辑解释:)
猜你喜欢
  • 1970-01-01
  • 2016-06-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多