使用特定方法对字符串列表进行排序

Alb*_*rto 2 python sorting string list

假设我有一个像这样的字符串列表

L = ['5', '3', '4', '1', '2', '2 3 5', '2 4 8', '5 22 1 37', '5 22 1 22', '5 22 1 23', ....]
Run Code Online (Sandbox Code Playgroud)

我如何排序这个列表,以便我会有这样的事情:

L = ['1', '2', '3','4', '5', '2 3 5', '2 4 8', '5 22 1 22', ' 5 22 1 23', '5 22 1 37', ...]
Run Code Online (Sandbox Code Playgroud)

基本上我需要根据2个字符串之间的第一个不同的数字来排序列表

Dan*_*ejo 5

你可以使用元组排序:

L = ['5', '3', '4', '1', '2', '2 3 5', '2 4 8', '5 22 1 37', '5 22 1 22', '5 22 1 23']

result = sorted(L, key=lambda x: (len(x.split()),) + tuple(map(int, x.split())))

print(result)
Run Code Online (Sandbox Code Playgroud)

产量

['1', '2', '3', '4', '5', '2 3 5', '2 4 8', '5 22 1 22', '5 22 1 23', '5 22 1 37']
Run Code Online (Sandbox Code Playgroud)

这个想法是使用元组作为键,其中第一个元素是字符串中的数字量,其余的是数字元组.例如,'2 3 5'关键是(3, 2, 3, 5)

正如@ PM2Ring所建议的那样,您可以使用def函数而不是lambda:

def key(x):
    numbers = tuple(map(int, x.split()))
    return (len(numbers),) + numbers
Run Code Online (Sandbox Code Playgroud)