2015-08-27 23 views
0

處理我試試這個:在Python如何在一個列表確保項目順利

for k in keywords_list: 
    google_add = random.choice(google_adds_list) 
    url = make_up_url(google_add, k, False) 
    if scrape_keyword_count(k, useragent_list, url, result_dir): 
     keyword_count = scrape_keyword_count(k, useragent_list, url, result_dir) 
     all_keyword_count.append(keyword_count) 
     print '%s Finish. Removeing it from the list' % k 
     keywords_list.remove(k) 
    else: 
     print "%s may run into problem, removing it from list" % google_add 
     google_adds_list.remove(google_add) 
     with open(google_adds, 'w') as f: 
      f.write('\n'.join(google_adds_list)) 

我設立了谷歌許多反向代理服務器。服務器列表是google_add_list 我的意思是搜索列表中的所有項目與我提供的添加並得到結果 如果谷歌阻止我,scrape_keyword_count()將返回None。然後我 而我需要改變到另一個添加做搜索。但劇本我寫會跳過關鍵字無論scrape_keyword_count()成功與否

我知道中移除項目的循環是很危險的,我會提高這部分後來

+1

你是什麼意思「物品我已被跳過」? do_something_with必須已經返回True,這就是爲什麼我被刪除。 – sureshvv

+0

據此:[https://wiki.python.org/moin/ForLoop](https://wiki.python.org/moin/ForLoop)for循環只需取出一次,然後我do_something_with(i )for循環會得到下一個項目,我錯了嗎? – shierji

+0

爲什麼要刪除''我''?似乎沒有必要。你能舉一個簡單的例子:「do_something_with''實現嗎? – kxxoling

回答

0

也許:

new_list = [] 
for i in the_list: 
    if do_something_with(i): 
     continue 
    do_something_else(i) 
    new_list.append(i) 

如果do_something_with(i)成功,則繼續下一個項目,否則繼續do_something_else(i)

您不能在迭代列表時對列表進行變更。如果需要過濾的列表,而不是從舊的列表中刪除元素,則會生成一個新列表。

+0

他可能想要用the​​_list做一些事情。否則,爲什麼要去除物品呢? – sureshvv

2

這裏的問題是你在迭代時修改列表。

改爲使用「for i in the_list [:]」。這將迭代列表的副本,修復您的「跳過」(錯過的元素)問題。

+0

從列表中刪除元素沒有任何問題。追加/修改可能是另一回事。 – sureshvv

0

for循環將使用每一個項目一次...您的代碼看起來不錯...但我認爲你可能不會在do_something_with

返回正確的值試試這個:

for i in the_list: 
    value = do_something_with(i) 
    print bool(value) 
    if value: 
     the_list.remove(i) 
    <etc> <etc> 

我認爲你可能總是返回從do_something_with真

相關問題