按字符串的一部分对字符串列表进行排序

eri*_*fas 16 python sorting string list

我有一个字符串列表,其格式如下:

['variable1 (name1)', 'variable2 (name2)', 'variable3 (name3)', ...]
Run Code Online (Sandbox Code Playgroud)

...我希望(nameX)按字母顺序对部分进行排序.我该怎么做呢?

Bar*_*zKP 29

要更改排序键,请使用以下key参数:

>>>s = ['variable1 (name3)', 'variable2 (name2)', 'variable3 (name1)']
>>> s.sort(key = lambda x: x.split()[1])
>>> s
['variable3 (name1)', 'variable2 (name2)', 'variable1 (name3)']
>>> 
Run Code Online (Sandbox Code Playgroud)

以相同的方式工作sorted:

>>>s = ['variable1 (name3)', 'variable2 (name2)', 'variable3 (name1)']
>>> sorted(s)
['variable1 (name3)', 'variable2 (name2)', 'variable3 (name1)']
>>> sorted(s, key = lambda x: x.split()[1])
['variable3 (name1)', 'variable2 (name2)', 'variable1 (name3)']
>>> 
Run Code Online (Sandbox Code Playgroud)

请注意,如问题中所述,这将是按字母顺序排序,因此对于2位数组件,它不会将它们解释为数字,例如"11"将在"2"之前.

  • 如果您需要它对数字进行排序,只需将其包装在 int 中,如下所示: s.sort(key = lambda x: int(x.split()[1])) (2认同)

Ash*_*ary 7

您可以使用正则表达式:

>>> import re
>>> r = re.compile(r'\((name\d+)\)')
>>> lis = ['variable1 (name1)', 'variable3 (name3)', 'variable2 (name100)']
>>> sorted(lis, key=lambda x:r.search(x).group(1))
['variable1 (name1)', 'variable2 (name100)', 'variable3 (name3)']
Run Code Online (Sandbox Code Playgroud)

请注意,上面的代码将返回类似name100之前的内容name3,如果您不想要,那么您需要执行以下操作:

>>> r = re.compile(r'\(name(\d+)\)')
def key_func(m):
    return int(r.search(m).group(1))

>>> sorted(lis, key=key_func)
['variable1 (name1)', 'variable3 (name3)', 'variable2 (name100)']
Run Code Online (Sandbox Code Playgroud)


aga*_*ver 5

只需使用方法的key参数即可sort

test.sort(key = lambda x: x.split("(")[1])
Run Code Online (Sandbox Code Playgroud)

祝好运!

编辑:test是数组。


jer*_*koo 5

解决方案是:

sorted(b, key = lambda x: x.split()[1])
Run Code Online (Sandbox Code Playgroud)

为什么?我们要对列表进行排序(称为b)。我们将使用键(名称X)作为键。在这里,我们假定它将始终以空格开头,因此我们将列表中的项目拆分为两个,然后根据第二个进行排序。