您可以使用正则表达式和键 lambda:
>>> L.sort(key=lambda s: int(re.search(r'_(\d+)',s).group(1)))
>>> L
['actor_1', 'actor_3', 'actor_5', 'actor_55', 'actor_130']
由于 Python 的 sort 是stable,如果您希望列表首先按下划线左侧的字符串排序,然后按右侧的数字排序两次:
>>> L = ['actor_1', 'actor_3', 'actor_130', 'actor_55', 'voice_5', 'actor_5']
>>> L.sort()
>>> L.sort(key=lambda s: int(re.search(r'_(\d+)',s).group(1)))
>>> L
['actor_1', 'actor_3', 'actor_5', 'voice_5', 'actor_55', 'actor_130']
或者你可以通过在你的键函数中返回一个元组来做同样的事情,首先对数字进行排序,然后对 LH 字符串进行排序:
>>> L.sort(key=lambda s: (int(re.search(r'_(\d+)',s).group(1)),s))
>>> L
['actor_1', 'actor_3', 'actor_5', 'voice_5', 'actor_55', 'actor_130']
或者:
>>> L.sort(key=lambda s: (int(s.split('_')[1]), s))
执行两种排序通常比执行一种复杂排序更快 。