【问题标题】:How to sort a list by last character of string如何按字符串的最后一个字符对列表进行排序
【发布时间】:2015-09-27 04:57:38
【问题描述】:

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

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

【问题讨论】:

  • 数字总是个位数吗?
  • 在这种情况下,是的。

标签: python string list sorting


【解决方案1】:
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 函数 的列表。

【讨论】:

  • 如果可能,请努力提供额外的解释,而不仅仅是代码。此类答案往往更有用,因为它们可以帮助社区成员,尤其是新开发人员更好地理解解决方案的推理,并有助于避免需要解决后续问题。
【解决方案2】:
def last_letter(word):
    return word[::-1]

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

【讨论】:

    【解决方案3】:

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

    >>> 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 而不是 函数
    • lambda 用于创建匿名函数。
    【解决方案4】:

    如果数字不是个位数,可以试试-

    >>> 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 次拆分后停止。在上述情况下,它只在一个空格处拆分字符串一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 2021-06-10
      • 2012-07-03
      • 2014-02-21
      • 1970-01-01
      • 2015-09-01
      • 2017-01-27
      相关资源
      最近更新 更多