我有一个字符串列表,其格式如下:
['variable1 (name1)', 'variable2 (name2)', 'variable3 (name3)', ...]
...我希望按字母顺序根据(nameX)
部分对列表进行排序。我该怎么做呢?
答案 0 :(得分:26)
要更改排序键,请使用the key
parameter:
>>>s = ['variable1 (name3)', 'variable2 (name2)', 'variable3 (name1)']
>>> s.sort(key = lambda x: x.split()[1])
>>> s
['variable3 (name1)', 'variable2 (name2)', 'variable1 (name3)']
>>>
与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)']
>>>
请注意,如问题中所述,这将是按字母顺序排序,因此对于2位数组件,它不会将它们解释为数字,例如“11”将在“2”之前出现。
答案 1 :(得分: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)']
请注意,上面的代码会在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)']
答案 2 :(得分:5)
只需使用key
方法的sort
参数。
test.sort(key = lambda x: x.split("(")[1])
祝你好运!
编辑:test
是数组。
答案 3 :(得分:5)
解决方案是:
sorted(b, key = lambda x: x.split()[1])
为什么呢?我们想对列表进行排序(称为b)。作为密钥,我们将使用(名称X)。这里我们假设它总是以空格开头,因此我们将列表中的项目拆分为两个并根据第二个进行排序。