Итеративная сборка строки с разными размерами ввода - PullRequest
0 голосов
/ 28 апреля 2020

Извините, если это запутанный способ сформулировать вопрос, быстрый код псевдо, прежде чем я попытаюсь объяснить его:

#for my purpose its to build urls

base='www.page.com/'
list1=['a','b','c','d']
list2=['1','2','3']
list3=['orange','blue','white','yellow','red','green']

for index in each list:
    base+=base+/list1[idx]/list2[idx]/list3[idx]

    #desired output: 'www.page.com/a/1/orange', 'www.page.com/b/1/orange' 
    #and so on filling in each of them as I go

Итак, я пытаюсь создать URL с различными шаблонами окончания в конце.

Я не уверен, где go. Я пытался использовать вложенные циклы, но это дало мне бесконечное значение l oop:

    for i in list1:
        for j in list2:
            for k in list3:
                base+=base+'  '+i+' '+j+' '+k
                print(base)

Любая помощь приветствуется. Также, если бы вы могли объяснить, как это работает, это было бы просто фантастически c.

Ответы [ 2 ]

2 голосов
/ 28 апреля 2020

У вас нет бесконечного l oop, но вы продолжаете добавлять к base, что не следует. Просто сделайте:

for i in list1:
    for j in list2:
        for k in list3:
            url = base + i + '/' + j + '/' + k
            print(url)

Или вы можете быть немного более кратким, используя itertools.product:

from itertools import product

base='www.page.com'  # remove '/'
# list1 = ...
# ...

for p in product(list1, list2, list3):
    print('/'.join([base, *p]))
0 голосов
/ 28 апреля 2020

Возможно, потому что он переполнит базу, или это займет много времени, чтобы завершить sh.

Объяснение : поэтому ваша исходная строка имеет длину: 13

Ваши списки имеют длину: 4, 3 и 6

После первого основания l oop имеет размер 13 + 13 + 1 + 1 + 1 + 1 + 1 + 6 = 37

Более или менее размер вашей базы увеличивается как минимум на 2 на каждой итерации:

Таким образом, в конце размер базы примерно равен: 13 * 2 ^ (4 * 3 * 6) = 61390764277305387778048

Что может быть немного больше;)

Исправить :

base=['www.page.com/']
list1=['a','b','c','d']
list2=['1','2','3']
list3=['orange','blue','white','yellow','red','green']

for i in list1:
        for j in list2:
            for k in list3:
                base.add(base[0]'  '+i+' '+j+' '+k)
                print(base[len(base)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...