2014-09-24 79 views
1

我已经atext文件和排序数字包含以下内容:与蟒蛇多个小数点

[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 
[email protected]@ 

我需要对它进行排序。由于你看到的数字从1开始,2等已经排序使用排序( )。但像'02 .04.03.02 @@'这样的数字被单独排序。但逻辑上它应该在1.之后。如何在Python中执行此操作?我在''分裂吗?'然后单独比较?

回答

4

拆分和映射到整数的键:

sorted(inputlist, key=lambda v: [int(i) for i in v.rstrip('@').split('.')]) 

这产生每一行整数列表,而这些都是然后按字典顺序排序;例如在不同的第一个元素上。

演示:

>>> sample = '''\ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... [email protected]@ 
... '''.splitlines() 
>>> from pprint import pprint 
>>> sorted(sample, key=lambda v: [int(i) for i in v.rstrip('@').split('.')]) 
['[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@', '[email protected]@'] 
>>> pprint(_) 
['[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@', 
'[email protected]@'] 
+0

会'键=拉姆达X:浮子(x.rstrip( “@”))'是整数的列表中的可接受的替代? – inspectorG4dget 2014-09-24 09:35:16

+1

@ inspectorG4dget:不,因为这里有3个组件的数字,它们不是有效的浮点数。 – 2014-09-24 09:36:00

+0

当我在代码中尝试时,它抛出“ValueError:int()与基数为10的无效文字:'\ x02'”@MartijinPieters – Nijesh 2014-09-24 10:10:26