具体排序由点分隔的数字列表

Vad*_*lev 8 python sorting list

我有一个清单:

L = ['1.1.1.', '1.1.10.', '1.1.11.', '1.1.12.', '1.1.13.', '1.1.2.', '1.1.3.', '1.1.4.']
Run Code Online (Sandbox Code Playgroud)

我想按下一个顺序对它进行排序:

1.1.1.
1.1.2.
1.1.3.
1.1.4.
1.1.10.
1.1.11.
1.1.12.
1.1.13.
Run Code Online (Sandbox Code Playgroud)

以下方法不会产生结果:

L.sort(key=lambda s: int(re.search(r'.(\d+)',s).group(1)))
Run Code Online (Sandbox Code Playgroud)

the*_*eye 9

只需获取最后一部分,将其转换为int并将其作为比较键返回

print(sorted(L, key=lambda x: int(x.split(".")[2])))
Run Code Online (Sandbox Code Playgroud)

如果您想要考虑所有部件,您可以这样做

print(sorted(L, key=lambda x: [int(i) for i in x.rstrip(".").split(".")]))
Run Code Online (Sandbox Code Playgroud)

它删除.字符串的末尾,根据它们拆分它们.,然后将它的每个部分转换为int.返回的列表将用于比较.

您可以在此处阅读有关Python如何比较各种序列的更多信息

产量

['1.1.1.','1.1.2.','1.1.3.','1.1.4.','1.1.10.','1.1.11.','1.1.12.','1.1.13.']
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 5

如果需要按所有数字排序,请在键函数中生成一个整数序列:

sorted(L, key=lambda v: [int(p) for p in v.split('.') if p.isdigit()])
Run Code Online (Sandbox Code Playgroud)

面对点之间的非数字值,该方法是稳健的.

演示:

>>> L = ['1.1.1.', '1.1.10.', '1.1.11.', '1.1.12.', '1.1.13.', '1.1.2.', '1.1.3.', '1.1.4.']
>>> sorted(L, key=lambda v: [int(p) for p in v.split('.') if p.isdigit()])
['1.1.1.', '1.1.2.', '1.1.3.', '1.1.4.', '1.1.10.', '1.1.11.', '1.1.12.', '1.1.13.']
Run Code Online (Sandbox Code Playgroud)

您的特定尝试仅返回列表中的第二个数字,该数字始终 为您的样本数据1.