如何通过字符串的最后一个字符对列表进行排序

16

我正在尝试编写一个程序,根据每个字符串的最后一个字符对字符串列表进行排序。

["Tiger 6", "Shark 4", "Cyborg 8"]是我的列表,但我需要根据末尾的数字将它们按数字顺序排列。


这些数字总是一位数吗? - Anand S Kumar
在这种情况下,是的。 - Chris Hodges
4个回答

21
我正在尝试编写一个程序,根据每个字符串的最后一个字符对字符串列表进行排序。
>>> s = ["Tiger 6", "Shark 4", "Cyborg 8"]
>>> sorted(s, key=lambda x: int(x[-1]))
['Shark 4', 'Tiger 6', 'Cyborg 8']

如果最后一位有更多数字,请尝试这个。

>>> import re
>>> sorted(s, key=lambda x: int(re.search(r'\d+$',x).group()))
['Shark 4', 'Tiger 6', 'Cyborg 8']

re.search(r'\d+$',x).group() 可以帮助获取字符串中最后一个数字,无论它前面是否有空格。


为什么要使用lambda作为键,而不是函数 - wwii
3
lambda用于创建匿名函数。 - Avinash Raj

5
def last_letter(word):
    return word[::-1]

mylst = ["Tiger 6", "Shark 4", "Cyborg 8"]
sorted(mylst, key=last_letter)

2
nums = ["Tiger 6", "Shark 4", "Cyborg 8"]
slist=sorted(nums,key = lambda x:x[-1])
  1. 这里的 nums 是一个列表。
  2. slist 中,它从列表 nums 中获取参数列表。
  3. 这里的 lambda 函数从列表中获取参数并返回它的最后一个值(例如,如果它是来自 nums 的第一个参数(即 ''Tiger 6''),则返回6)。
  4. sorted 函数基于 lambda 函数 返回一个列表。

尽可能地,请努力提供额外的解释,而不仅仅是代码。这样的答案往往更有用,因为它们帮助社区成员,特别是新开发人员更好地理解解决方案的原因,并可以帮助防止需要回答后续问题的需要。 - Rajan

1
如果数字不是单个数字,您可以尝试使用 -
>>> l = ["Tiger 6", "Shark 4", "Cyborg 8", "Temporary 12"]
>>> l.sort(key = lambda x: int(x.rsplit(' ',1)[1]))
>>> l
['Shark 4', 'Tiger 6', 'Cyborg 8', 'Temporary 12']

str.rsplit(s, n)函数从字符串末尾开始向字符串开头分割,并在n个分割后停止。在上述情况下,它只在一个空格处分割字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接