我的数据库中有一个以用户和IP地址为字段的模型。假设表数据如下所示:
**User** **IP Address**
xyz 127.0.0.1
pqr 127.0.0.2
lmn 127.0.0.3
qwe 127.0.0.4
fds 127.0.0.5
... ...
... ...
... ...
poi 127.0.0.100
现在我从表中删除第2、第4、第8和第50行。
现在,表看起来像:
**User** **IP Address**
xyz 127.0.0.1
lmn 127.0.0.3
fds 127.0.0.5
... ...
... ...
... ...
poi 127.0.0.100
现在,我想按排序顺序检查所有IP,并返回IP的最小删除值。
怎么做?
发布于 2014-05-28 03:48:58
我想您只在127.0.0这样的一个ip范围上操作。
如果您想要处理多个ip范围,则语句将变得更加复杂。
因此,通常要按ip号的最后一部分(127.0.0.XXX)排序,可以执行以下排序操作
sorted(my_ip_list, key=lambda x:int(x.split('.')[3]))
若要返回新排序列表或
my_ip_list.sort(cmp, key=lambda x:int(x.split('.')[3]))
就地分拣
要在ip列表中获得最小的空白,可以执行以下列表理解操作
sorted(
[ y for y in [ ''.join(['127.0.0.',str(x)]) for x in range(1,255) ]
if y not in my_ip_list ]
, key=lambda x:int(x.split('.')[3]))[0]
那它是做什么的?让我们从内部看一看:
my_ip_list := is list of ip adresses with deleted entries
下一步:列表理解
[ y for y in [ ''.join(['127.0.0.',str(x)]) for x in range(1,255) ]
if y not in my_ip_list ]
这将生成从127.0.0.1到127.0.0.255的ip地址列表。然后,它将迭代每个创建的ip地址,并检查它是否不在您的实际ip地址列表中。如果没有,请将该ip地址追加到新列表中。换句话说:我们得到了一个已删除的ip地址列表。
最后一步,对已删除的ip地址列表进行排序,以找到最小的ip地址。在这里,您可以看到为什么我的方法只适用于一组非常有限的ip地址,因为我们只按地址的最后一部分( 127.0.0.XXX部分)进行排序。
无论如何,最后一步遵循前面提到的使用sorted(...)
或list.sort()
对ip范围进行排序的思想。
https://stackoverflow.com/questions/23904734
复制相似问题