Альтернатива тройному вложенному циклу в python - PullRequest
0 голосов
/ 05 июня 2019
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 url_ in url_list:
   for category_id in category_id_list:
       for zip_ in zip_list:

           request_url = url_+category_zip_
           func(request_url)

Это делает работу, но есть ли более оптимальный способ сделать это? Спасибо!

Ответы [ 2 ]

2 голосов
/ 05 июня 2019

Вы можете использовать itertools.product

import itertools

for url in (str.join("",url) for url in itertools.product(url_list,category_id_list,zip_list)):
    func(url)
0 голосов
/ 05 июня 2019

Это может быть немного поздно, но я так и сделал:

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
...