附加在迭代到列表(Append to List while Iterating)

2019-07-20 20:21发布

我需要这种行为,但宁愿有一个递减的列表,而不是一个增长的一个。 序列顺序是这个工作非常重要。

for item in mylist:
    if is_item_mature(item):
        ## Process him
    else:
        ## Check again later
        mylist.append(item)

但我宁愿把它更像是这一点。 这是否行为像我想的? 任何更好的方法?

while mylist:
    item = list.pop(0)
    if is_item_mature(item):
        ##Process
    else:
        mylist.append(item)

Answer 1:

我用你的方法看到的唯一的问题是越来越多的列表,这取决于你的使用可能会吃了你的记忆

我宁愿建议你使用一个队列 。 队列的设计和足够的灵活性来处理这两种端生产和消费

from Queue import Queue
q = Queue() #You can also specify the maximum size of the Queue here
# Assume your Queue was filled
while not q.empty():
    # It won;t block if there are no items to pop
    item = q.get(block = False) 
    if is_item_mature(item):
        #process
    else:
        #In case your Queue has a maxsize, consider making it non blocking
        q.put(item) 


Answer 2:

您可以放心地将项附加到列表中,而迭代将包括这些项目:

>>> lst = range(5)
>>> for i in lst:
...     print i
...     if i < 3:
...         lst.append(i + 10)
... 
0
1
2
3
4
10
11
12

但是,如果你喜欢一个递减的名单,那么你while循环是完全适合您的需求。



文章来源: Append to List while Iterating