根据字符串内容对字符串列表进行排序[重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

我试图解决这个字符串列表的排序问题。

所有字符串都以字母数字标识符开头,在字母数字标识符之后,字符串将由字或整数组成。

输出列表需要遵循以下规则进行组织:

  • 带有单词的字符串必须位于列表的开头
  • 带有单词的字符串按字典顺序排序,忽略标识符
  • 具有整数的字符串必须保留原始顺序
  • 标识符必须是输出字符串的一部分

list = ['a1 9 2 3 1', 'g1 act car', 'zo4 4 7', 'ab1 off key dog', 'a8 act zoo']

reordered_list = [ 'g1 act car', 'a8 act zoo', 'ab1 off key dog', 'a1 9 2 3 1', 'zo4 4 7']

我正在尝试拆分字符串使用lambda函数按第二个值排序,但输出是None

list.sort(key = lambda x: x.split()[1])

python list sorting lambda
1个回答
0
投票

您可以将sorted函数与key函数一起使用,该函数根据最后一个字符是否为数字返回1或2个元组的元组(因为可能它表示它是否是带有整数的字符串),并使用整数字符串优先处理字符串上的字符串通过为字符串提供元组的第一项,其中包含较小数字的字符:

sorted(l, key=lambda s: (1,) if s[-1].isdigit() else (0, s.split(' ', 1)[1]))

返回:

['g1 act car', 'a8 act zoo', 'ab1 off key dog', 'a1 9 2 3 1', 'zo4 4 7']
© www.soinside.com 2019 - 2024. All rights reserved.