python整理十六——IP地址排序

来源:互联网 发布:mac照片导出iphone 编辑:程序博客网 时间:2024/05/16 09:32

关于ip地址的排序问题:

假如现在有一堆乱序的ip,

源数据:ls1 = ['192.168.1.8','192.168.36.8','192.168.26.8',]

排序之后期望值:ls1 = ['192.168.1.8', '192.168.26.8', '192.168.36.8']

  1. >>> ls1 = ['192.168.1.8','192.168.36.8','192.168.26.8',]
  2. >>> ls1.sort()
  3. >>> ls1
  4. ['192.168.1.8''192.168.26.8''192.168.36.8']

看到结果与期望值相符,欣慰。

 

再看一例:

源数据:ls2 = ['192.168.1.8', '192.168.36.8', '192.168.26.8', '192.168.8.8']

排序之后期望值:ls2 = ['192.168.1.8', '192.168.8.8', '192.168.26.8', '192.168.36.8']

  1. >>> ls2 = ['192.168.1.8','192.168.36.8','192.168.26.8','192.168.8.8']
  2. >>> ls2.sort()
  3. >>> ls2
  4. ['192.168.1.8''192.168.26.8''192.168.36.8''192.168.8.8']
  5. >>> 

哦~怎么结果和期望值不一样了?原来是因为忽略了它是用字符串比较的,问题就出在这了,因此,改为如下排序:

  1. >>> ls2 = ['192.168.1.8','192.168.36.8','192.168.26.8','192.168.8.8']
  2. >>> ls2.sort(lambda x,y: cmp(''.join( [ i.rjust(3, '0'for i in x.split('.')] ), ''.join( [ i.rjust(3, '0'for i in y.split('.')] ) ) )
  3. >>> ls2
  4. ['192.168.1.8''192.168.8.8''192.168.26.8''192.168.36.8']

哈,又和期望值一致了。

正确的排序方法应该是:ls1.sort(lambda x,y: cmp(''.join( [ i.rjust(3, '0') for i in x.split('.')] ), ''.join( [ i.rjust(3, '0') for i in y.split('.')] ) ) )

而并非ls1.sort()

 

原创粉丝点击