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 に答える