根据字符串内容对字符串列表进行排序

时间:2019-02-19 23:35:12

标签: python list sorting lambda

我正在尝试解决字符串列表的排序问题。

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

需要按照以下规则组织输出列表:

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

示例

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])

1 个答案:

答案 0 :(得分:0)

您可以将sorted函数与键函数一起使用,该键函数根据最后一个字符是否为数字(因为它可能表示它是带整数的字符串)返回一个包含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']