从列表中删除特定索引,同时迭代/改善嵌套循环

时间:2019-04-17 06:22:00

标签: python python-3.x loops for-loop

我处于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 个答案:

答案 0 :(得分:1)

不知道全部情况,很难说哪种方法是最佳的。无论如何,这是一种使用理解的方法。

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

答案 1 :(得分:0)

它的工作原理很像您的建议。相关的关键字是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.htmlDifference between del, remove and pop on lists之类的答案