Rea*_*too -1 python sorting list
我正在尝试从以下列表中对 IP 地址列表进行排序。
IPlist= ['209.85.238.4', '216.239.51.98', '64.233.173.198', '64.3.17.208', '64.233.173.238']
Run Code Online (Sandbox Code Playgroud)
#第一个案例
tmp1 = [list (map (str, ip.split("."))) for ip in IPlist]
tmp1.sort()
print(tmp1)
Run Code Online (Sandbox Code Playgroud)
当我运行这个片段时。我得到以下输出。
[['209', '85', '238', '4'], ['216', '239', '51', '98'], ['64', '233', '173', '198'], ['64', '233', '173', '238'], ['64', '3', '17', '208']]
Run Code Online (Sandbox Code Playgroud)
#第二种情况
tmp = [tuple (map (int, ip.split("."))) for ip in IPlist]
# print(tmp)
tmp.sort ()
print(tmp)
Run Code Online (Sandbox Code Playgroud)
当我运行第二个案例时,我得到以下输出。
[(64, 3, 17, 208), (64, 233, 173, 198), (64, 233, 173, 238), (209, 85, 238, 4), (216, 239, 51, 98)]
Run Code Online (Sandbox Code Playgroud)
我发现唯一的区别是使用上述函数转换为字符串或 int 函数。但即使初始值是字符串,sort()函数的工作方式不也是一样的吗?
例如:
lst = ['23', '33', '11', '7', '55']
# Using sort() function with key as int
lst.sort(key = int)
print(lst)
Output:
['7', '11', '23', '33', '55']
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为地址被作为字符串进行比较,这些字符串是按词法排序的 - 将它们转换为数字将按照您期望的方式排序
>>> sorted(["11", "2"])
['11', '2']
>>> sorted([11, 2])
[2, 11]
Run Code Online (Sandbox Code Playgroud)
ipaddress但是,总体而言,使用内置模块可能更好,它可以为您正确排序地址,并且具有有用的方法和 IP 地址比较(例如检查 IP 是否是子网的成员或提供接口的网络地址)带有 IP 和掩码)
>>> import ipaddress
>>> ip_list = ['209.85.238.4', '216.239.51.98', '64.233.173.198', '64.3.17.208', '64.233.173.238']
>>> sorted(ipaddress.ip_address(a) for a in ip_list)
[IPv4Address('64.3.17.208'), IPv4Address('64.233.173.198'), IPv4Address('64.233.173.238'), IPv4Address('209.85.238.4'), IPv4Address('216.239.51.98')]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |