首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Django 1.6 -如何从池中查找排序后的IP地址之间的差距并返回前一个地址

Django 1.6 -如何从池中查找排序后的IP地址之间的差距并返回前一个地址
EN

Stack Overflow用户
提问于 2014-05-27 22:58:46
回答 1查看 221关注 0票数 0

我的数据库中有一个以用户和IP地址为字段的模型。假设表数据如下所示:

代码语言:javascript
运行
AI代码解释
复制
**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行。

现在,表看起来像:

代码语言:javascript
运行
AI代码解释
复制
**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的最小删除值。

怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-28 03:48:58

我想您只在127.0.0这样的一个ip范围上操作。

如果您想要处理多个ip范围,则语句将变得更加复杂。

因此,通常要按ip号的最后一部分(127.0.0.XXX)排序,可以执行以下排序操作

代码语言:javascript
运行
AI代码解释
复制
sorted(my_ip_list, key=lambda x:int(x.split('.')[3]))

若要返回新排序列表或

代码语言:javascript
运行
AI代码解释
复制
my_ip_list.sort(cmp, key=lambda x:int(x.split('.')[3]))

就地分拣

要在ip列表中获得最小的空白,可以执行以下列表理解操作

代码语言:javascript
运行
AI代码解释
复制
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]

那它是做什么的?让我们从内部看一看:

代码语言:javascript
运行
AI代码解释
复制
my_ip_list := is list of ip adresses with deleted entries

下一步:列表理解

代码语言:javascript
运行
AI代码解释
复制
[ 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范围进行排序的思想。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23904734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档