如何前进到嵌套列表中的下一项?Python

2024-05-02 00:08:06 发布

您现在位置:Python中文网/ 问答频道 /正文

使用两个列表,对每个列表进行迭代。以下是代码段:

self.links = []
self.iter=iter(self.links)
for tgt in self.links:
    for link in self.mal_list:
        print(link)
        if tgt == link:
           print("Found Suspicious Link: {0}".format(tgt))
           self.count += 1

        else:
           self.count += 1
           self.crawl(self.iter.next())

它前进到链接列表中的下一项,很好。对于恶意软件签名列表,我尝试使用一个类似的iter项,但我不完全确定这是否是最好的方法,如果是这样的话,请将它放在我的代码中,以便在循环打开链接列表中的下一个项之前,将列表中url打开的每个链接与恶意软件列表中的每个项进行比较。有什么建议吗?在


Tags: inself列表forif链接代码段count
3条回答

你做这件事的基本方法是好的,但会很慢。在

试试这个:

 for tgt in links:
      if tgt in mal_links:
          # you know that it's a bad link
      else:
          crawl(tgt)

我不明白你为什么要让两个迭代器遍历列表。这将引入一个bug,因为在检测到恶意软件链接的情况下,不会调用next上的self.iter。下一次tgt不是坏链接,当您调用next时,它将前进到先前检测到的坏链接,您将对此进行爬网。有没有什么原因让您觉得需要跨越迭代器的两个副本而不是一个副本?在

此外,您的初始代码将抓取一次网页,每次它不是确定为等于一个给定的恶意软件链接。这可能会导致一些愤怒的网站管理员,这取决于你的列表有多大。在

搜索列表中的项目很慢,如果这是您要做的,那么使用dictset来代替self.mal_list

mal_list = set(self.mal_list)
for tgt in self.links:
    if tgt in mal_list: 
        print("Found Suspicious Link: {0}".format(tgt))
        self.count += 1
    else:
        self.count += 1
        self.crawl(self.iter.next())

或者,如果你能自我链接以及设置:

^{pr2}$

不确定,你想问什么,但你可以简化你的代码。虽然这不是必须的。在

self.links = []
self.non_malware_link = [link for link in self.links if link not in self.mal_list]
results = map(self.crawl, self.non_malware_link)

关于代码的一些问题:

  1. 在自我计数和伦一模一样(自我链接)在

除了意义自我计数,其他一切看起来都像是在做它需要做的事情。在

相关问题 更多 >