簡體   English   中英

python中三重嵌套循環的替代方法

[英]Alternative to triple nested loop in python

url_list = ['www.scrape.com/file1', 'www.scrape.com/file2', ''www.scrape.com/file3'] 

category_id_list = ['12345','abcde','ABCDE']

zip_list = ['10075','10017','10028']

我使用三個變量來創建要請求的 URL。 順序:url_list+zip+categoryid

然后將 url 傳遞到具有抓取代碼的函數中

我使用 3 個 for 循環來迭代這些列表,但這是高度冗余的

for url_ in url_list:
   for category_id in category_id_list:
       for zip_ in zip_list:

           request_url = url_+category_zip_
           func(request_url)

這可以完成工作,但是有沒有更優化的方法來做到這一點? 謝謝!

您可以使用itertools.product

import itertools

for url in (str.join("",url) for url in itertools.product(url_list,category_id_list,zip_list)):
    func(url)

這可能有點晚了,但這是我這樣做的方式:

cats = ["a","b","c","d"]

zips = ["25320","53902","59607","53123"]

base = "https://example.com"

for i in range(4):
   url = "{}/{}/{}".format(base, cats[i], zips[i])
   print(url)

輸出:

https://example.com/a/25320
https://example.com/b/53902
https://example.com/c/59607
https://example.com/d/53123

避免編寫多個 for 循環的一種方法是使用zip 。它允許您一次訪問每個列表中的第 i 個元素。 因此,您可以執行以下操作:

url_list = ['www.scrape.com/file1', 'www.scrape.com/file2', 'www.scrape.com/file3']
category_id_list = ['12345','abcde','ABCDE']
zip_list = ['10075','10017','10028']

for url, id, zip in zip(url_list, category_id_list, zip_list):
    request_url = url + id + zip
    func(request_url)

暫無
暫無

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

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