【发布时间】:2011-12-12 12:00:02
【问题描述】:
我目前需要使用 Python 2.7 比较包含 MAC 地址的字符串(例如“11:22:33:AA:BB:CC”。目前,我有一个包含 MAC 地址的预配置集和我的脚本遍历集合,将每个新的 MAC 地址与列表中的地址进行比较。这很有效,但随着集合的增长,脚本会大大减慢。只有 100 个左右,您会注意到巨大的差异。
有人对加快这个过程有什么建议吗?将它们存储在一组中是比较的最佳方式,还是将它们存储在 CSV/DB 中更好?
代码示例...
def Detect(p):
stamgmtstypes = (0,2,4)
if p.haslayer(Dot11):
if p.type == 0 and p.subtype in stamgmtstypes:
if p.addr2 not in observedclients:
# This is the set with location_mutex:
detection = p.addr2 + "\t" + str(datetime.now())
print type(p.addr2)
print detection, last_location
observedclients.append(p.addr2)
【问题讨论】:
-
道歉 Avasal - 我的意思是“设置” - 原帖已修改。对不起!
-
您可以将列表转换为集合,这将消除重复..(错误删除原始评论)
-
observedclients应该是一组吗?好吧,从您展示的内容来看,这是一个列表,而不是一组。 Sets 没有.append方法。您使用.add添加到集合。 -
observedclients 确实是集合(或者我相信)。我在代码的开头将其声明为“observedclients = []”。这可能是我的问题所在?我现在假设我应该将我的集合声明为“observed = []”,然后声明为“observedclients = set(observed)”?
-
好吧,
[]创建了一个列表。您需要set()来创建一个。然后你用observedclients.add(p.addr2)添加它。它可能会提高性能。
标签: python performance list iteration scapy