排序列表的 Pythonic 方式

标签 python sorting

例如我会有一个列表

lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']

我需要根据数字对它进行排序,

lists.sort() = ['ben 10', 'jack 20', 'ollie 35', 'alisdar 50']

可能以某种方式使用 split() 格式化?

最佳答案

使用函数:

lists.sort(key=lambda s: int(s.rsplit(None, 1)[-1]))

key 可调用函数传递给 lists 中的每个元素,并根据返回值对该元素进行排序。在这种情况下,我们

  • 在空白处拆分一次,从右边开始
  • 取拆分的最后一个元素
  • 把它变成一个整数

key 的参数可以是任何可调用的,但 lambda 只是更紧凑。您可以在命令提示符中尝试一下:

>>> key_function = lambda s: int(s.rsplit(None, 1)[-1])
>>> key_function('ben 10')
10
>>> key_function('Guido van Rossum 42')
42

实际上,在排序时,值增加该函数的返回值,排序的内容是:

[(20, 0, 'jack 20'), (10, 1, 'ben 10'), (50, 2, 'alisdar 50'), (35, 3, 'ollie 35')]

相反(使用第二个值,元素的索引,添加以在排序键相同的情况下保持原始顺序)。

结果:

>>> lists = ['jack 20', 'ben 10', 'alisdar 50', 'ollie 35']
>>> lists.sort(key=lambda s: int(s.rsplit(None, 1)[-1]))
>>> lists
['ben 10', 'jack 20', 'ollie 35', 'alisdar 50']

关于排序列表的 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15643865/

相关文章:

python - 如果参数完全符合,为什么 `curve_fit` 不能估计参数的协方差?

python - 将终端输出写入文件

java - 为什么Java中HashSet不按65535排序?

Javascript 对 HTML 表格中不同位数的数字进行排序

python - 如何知道 Pytorch 模型的输入/输出层名称和大小?

python - 按照给定列表的重复顺序选择 pandas 数据帧的行并保留原始索引

python - 透明小部件背景

python - 如何判断数组中是否只有一定数量的数字是连续的

android - 如何在Android中对HashMap(ArrayList内部)进行排序?

jquery - 获取全名数组并按姓氏排序