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

2024-10-03 19:26:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

['variable1 (name1)', 'variable2 (name2)', 'variable3 (name3)', ...]

。。。我想根据(nameX)部分按字母顺序对列表进行排序。我该怎么做呢?


Tags: 字符串列表排序顺序格式字母name1variable1
3条回答

要更改排序键,请使用the ^{} parameter

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

^{}的工作方式相同:

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

注意,如问题中所述,这将是一个字母排序,因此对于两位数的组件,它不会将它们解释为数字,例如,“11”将在“2”之前。

您可以使用regex进行以下操作:

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

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

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

只需使用sort方法的key参数。

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

祝你好运!

编辑:test是数组。

相关问题 更多 >