【问题标题】:Sort a list of strings by second-to-last character按倒数第二个字符对字符串列表进行排序
【发布时间】:2018-04-07 01:11:38
【问题描述】:

我需要使用字符比较对字符串列表进行排序,从倒数第二个元素开始向下移动到字符串的开头(对于相等的字符)。所以基本上我需要得到这个

in_ = ['message', 'essagem', 'ssageme', 'sagemes', 'agemess', 'gemessa', 'emessag']

result = ['emessag', 'essagem', 'sagemes', 'message', 'ssageme', 'agemess', 'gemessa']
# sorted on second to last character in each string

【问题讨论】:

  • 我没有看到任何排序。我只注意到“旋转”一个字符串(可以这么说)。此外:您尝试过什么?
  • >>> m="message"; m[-1]+m[:-1]
  • 也不是轮换,#1不变...修改字符串的标准不清楚!
  • 欢迎来到 Stackoverflow,请阅读How To Ask。特别关注How To Create MCVE。您在发布一个好问题上付出的努力越多:一个易于阅读、理解并且是 on topic 的问题 - 它吸引相关人员的机会就越高,您将更快地获得帮助。祝你好运!
  • 这两列 - 两个列表。第一个未排序(它是左移列表),所以我需要对其进行排序,第二个已排序(查看倒数第二个字符)。感谢 -1 顺便说一句

标签: python string list sorting


【解决方案1】:

这是你想要的吗?如果是,请将倒数第二个字母作为sort() 函数的键。

a = ['message', 'essagem', 'ssageme', 'sagemes', 'agemess', 'gemessa', 'emessag']
a.sort(key=lambda x:x[-2])
print(a)

输出:

['emessag', 'essagem', 'sagemes', 'message', 'ssageme', 'agemess', 'gemessa']

【讨论】:

    【解决方案2】:

    只是为了添加一些替代 Miraj50 的答案:您也可以使用 itemgetter 来完成它,有点 cleaner/faster way

    from operator import itemgetter
    
    in_list = ['message', 'essagem', 'ssageme', 'sagemes', 'agemess', 'gemessa', 'emessag']
    result = sorted(in_list, key=itemgetter(-2))
    print(result)
    

    输出:

    ['emessag', 'essagem', 'sagemes', 'message', 'ssageme', 'agemess', 'gemessa']
    

    【讨论】:

      猜你喜欢
      • 2016-05-25
      • 1970-01-01
      • 2021-06-10
      • 2018-07-02
      • 2012-04-03
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多