Удаление определенного индекса из списка при повторении / улучшении вложенных циклов - PullRequest
0 голосов
/ 17 апреля 2019

Я нахожусь в ситуации, когда у меня есть 3 вложенных цикла.Каждые x итераций я хочу перезапустить второй цикл for.Если элемент в 3-м цикле for удовлетворяет определенному условию, я хочу удалить этот элемент из списка.

Я не уверен, как реализовать это и использовать понимание списка или создание нового списка не будетон действительно работает, основываясь на похожих вопросах, которые я прочитал.

Пример псевдокода:

items_of_interest = ["apple", "pear"]

while True: # restart 10,000 iterations (API key only last 10,000 requests)
    api_key = generate_new_api_key()
    for i in range(10000):
        html = requests.get(f"http://example.com/{api_key}/items").text
        for item in items_of_interest:
            if item in html:
                items_of_interest.remove(item)

Исходный код намного больше, с большим количеством проверок, постоянным анализом API для чего-либо иэто немного грязно, чтобы организовать, как вы можете сказать.Я не уверен, как уменьшить сложность.

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Не зная полной картины, сложно сказать, какой подход является оптимальным.В любом случае, вот один подход, использующий понимание.

items_of_interest = ["apple", "pear"]

while True: # restart 10,000 iterations (API key only last 10,000 requests)
    api_key = generate_new_api_key()
    for i in range(10000):
        html = requests.get(f"http://example.com/{api_key}/items").text

        # Split your text blob into separate strings in a set
        haystack = set(html.split(' '))
        # Exclude the found items!
        items_of_interest = list(set(items_of_interest).difference(haystack))
0 голосов
/ 17 апреля 2019

Это работает так же, как вы предлагаете. Соответствующее ключевое слово - del. например,

>>> x = range(5)
>>> for i in ['a','b','c']:
...     print ('i:' + str(i) )
...     for j in x:
...         print('j:' + str(j))
...     if j == 3:
...             del x[j]
...
i:a
j:0
j:1
j:2
j:3
i:b
j:0
j:1
j:2
j:4
i:c
j:0
j:1
j:2
j:4

3 был удален из списка x для последующих проходов.

См. Также Python doco https://docs.python.org/3.7/tutorial/datastructures.html и ответы SO, такие как Разница между del, remove и pop в списках

...