例如我会有一个列表
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/