11

我需要这种行为,但宁愿减少列表而不是增加列表。序列顺序对于此操作很重要。

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

2 回答 2

11

我在您的方法中看到的唯一问题是一个不断增长的列表,根据您的使用情况可能会占用您的内存

我宁愿建议您使用Queue。队列的设计和灵活性足以处理结束的生产和消费

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) 
于 2013-03-02T14:56:41.853 回答
9

您可以安全地将项目附加到列表中,并且迭代将包括这些项目:

>>> 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循环非常适合您的需求。

于 2013-03-02T14:47:02.297 回答