簡體   English   中英

如何前進到嵌套列表中的下一個項目? 蟒蛇

[英]how do I advance to the next item in a nested list? 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項目,但我不完全確定這是否是最好的方法,如果是這樣的話,將它放在我的代碼中,以便從列表中刪除的每個鏈接進行比較惡意軟件列表中的每個項目在循環打開鏈接列表中的下一個項目之前。 有什么建議么?

不確定,你想要問什么,但你可以簡化你的代碼。 雖然這不是必要的。

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. self.count與len完全相同(self.links)

除了self.count的意義之外,其他任何東西看起來都像它需要做的那樣。

你做這件事的基本方法很好,但速度很慢。

試試這個:

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

我不明白你為什么要讓兩個迭代器越過列表。 這將引入一個錯誤,因為在您檢測到惡意軟件鏈接的情況下,您不會在self.iter上調用next 下一次tgt不是一個糟糕的鏈接,當你打電話給next ,它將前進到先前檢測到的壞鏈接,你將抓取它。 是否有某些原因讓你感覺需要跨過兩個迭代器副本而不是一個?

此外,每次未確定等於給定惡意軟件鏈接時,您的初始代碼將對頁面進行一次爬網。 這可能會導致一些憤怒的網站管理員,這取決於您的列表有多大。

搜索列表中的項目很慢,如果這是您要執行的操作,則使用dictset而不是list來表示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())

或者,如果你也可以設置self.links:

mal_list = set(self.mal_list)
links = set(self.links)
detected = links.intersection(mal_list)
for malware in detected:
    print("Found Suspicious Link: {0}".format(tgt))
    self.count += 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM