python整理十六 IP位址排序

2021-04-21 01:06:35 字數 1264 閱讀 3214

假如現在有一堆亂序的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']

>>> ls1 = ['192.168.1.8','192.168.36.8','192.168.26.8',]

>>> ls1.sort()

>>> ls1

['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']

>>> ls2 = ['192.168.1.8','192.168.36.8','192.168.26.8','192.168.8.8']

>>> ls2.sort()

>>> ls2

['192.168.1.8', '192.168.26.8', '192.168.36.8', '192.168.8.8']

>>> 

哦~怎麼結果和期望值不一樣了?原來是因為忽略了它是用字串比較的,問題就出在這了,因此,改為如下排序:

>>> ls2 = ['192.168.1.8','192.168.36.8','192.168.26.8','192.168.8.8']

>>> 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('.')] ) ) )

>>> ls2

['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()

python匹配ip位址

ip位址是用3個 號作為分隔符,分割4個數字,每個數字的取值在 0,255 一般日誌檔案中的ip位址都是有效的ip位址,不需要我們再去驗證,因此,若從日誌檔案中提取ip,那麼可以簡單寫成這樣 import re s kkk 192.168.1.136 kkk 192.168.1.137 kk 192...

Linux 配置靜態ip位址模板整理

配置檔案位置 etc sysconfig network scripts ifcfg eth0 device eth0 網絡卡的名字 hwaddr 00 0c 29 90 89 d9 hwaddr hardware address 硬體位址 mac位址 type ethernet 網路型別 乙太網 ...

python 實現ip定位位址

思路 ip 獲得經緯度 利用爬蟲去爬取www.gpsspg.com 得到ip的位址 匯入相應模組 import geoip2.database import requests,re def iplocation ip response geoip2.database.reader geolite2 ...