【问题标题】:sort string by number inside按里面的数字对字符串进行排序
【发布时间】:2013-06-01 12:53:46
【问题描述】:

我想知道如何按里面的数字对字符串进行排序。

例如我有:

hello = " hola %d" % (number_from_database)
bye = "adios %d" % (number_from_database_again)

即使数字发生变化,我也想按数字对它们进行排序。

【问题讨论】:

  • 您有这些要排序的列表吗?将它们与什么进行比较?
  • 例如,有时用户可以在网络“再见”之前排序而不是 hello 所以 hello = “hola 2”和 bye = “adios 1” 或者有时用户可以在再见之前排序 hello 所以我想要要知道如何按里面的数字对它们进行排序,谢谢:D
  • 这并没有使这更清楚。排序适用于一系列项目;你只有两个变量,hellobye
  • 这被称为“自然”排序,参见stackoverflow.com/q/11150239/989121 和其中的链接示例。

标签: python string int


【解决方案1】:

只是对安迪的回答的一点补充。

如果你想对也包含没有任何数字的字符串的集合进行排序:

sorted(l, key=lambda x: int('0'+re.sub('\D', '', x)))

,这会将那些没有任何数字的字符串放在开头。

【讨论】:

    【解决方案2】:
    salutations = [hello, bye]
    salutations.sort(key=lambda x: int(filter(lambda s: s.isdigit(), x.split())[0]))
    

    【讨论】:

      【解决方案3】:

      你可以传递一个键来排序:

      sorted(l, key=lambda x: int(re.sub('\D', '', x)))
      

      例如:

      In [1]: import re
      
      In [2]: l = ['asdas2', 'asdas1', 'asds3ssd']
      
      In [3]: sorted(l, key=lambda x: int(re.sub('\D', '', x)))
      Out[3]: ['asdas1', 'asdas2', 'asds3ssd']
      

      re.sub('\D', '', x) 替换 everything but the digits

      【讨论】:

      • 伙计,你就像一个工作的神,谢谢你的回答我不知道我该怎么感谢你。上帝保佑你
      • 但是我有 14 个声望,你投票我需要 15 个,当我有 15 个时我会投票
      猜你喜欢
      • 2015-07-19
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      • 2014-04-23
      • 2012-10-14
      • 2014-10-28
      • 1970-01-01
      相关资源
      最近更新 更多