[Tutor] IP sorting
Roman Suzi
rnd@onego.ru
Thu, 27 Dec 2001 10:15:12 +0300 (MSK)
On Thu, 27 Dec 2001, Karthik Gurumurthy wrote:
> this one is cool and so was danny's.
> i have a question here though.
>
> why do we need to convert to a tuple?
>
> lot = [tuple(map(int, ip.split("."))) for ip in iplist]
>
> is there any specific reason. Python does not know to sort a list of lists?
Tuple is a constant list. It is slightly faster to deal with tuples. In my
version I am using standard sort() method, which is much faster "as is"
than when it is using ANY cmp function.
"lot" is a list. I am applying .sort() to it to sort it.
IP adresses has sort order different from their string
representation. Another way to sort them is:
----------------------------------------------------
from socket import inet_aton, inet_ntoa
iplist = [
"195.168.1.123",
"192.168.1.123",
"192.168.1.111",
"192.168.1.11",
]
lot = map(inet_aton, iplist)
lot.sort()
iplist1 = map(inet_ntoa, lot)
print iplist1
------------------------------------------------------
Of course, it is possible to write cmp function as easy as:
def cmpIPAddresses(a, b):
return cmp(inet_aton(a), inet_aton(b))
That is, one can use the most compact version of IP-addresses
comparison:
from socket import inet_aton
iplist.sort(lambda a, b: cmp(inet_aton(a), inet_aton(b)))
Function socket.inet_aton converts symbolical IP-address into 4-byte
string, which can be compared by common rules.
> karthik.
Sincerely yours, Roman A.Suzi
--
- Petrozavodsk - Karelia - Russia - mailto:rnd@onego.ru -