www.un.org/Depts/DGACM/index_spanish.htm 简而言之,:如果你绝对相信所有新物体都失败,somecond(>
> > 核对,那么你的代码便可进行罚款,它只是浪费了新添加的物体。
在作出适当答复之前,你必须理解,为什么认为在篡改时改变名单/字句是错误的。 在使用<<<<>>>>>>>/>>时,<>>>> > > > > />> > > 并每次回收一个动态计算的项目。 查阅<>>/code>,< > >>>>>>>>>>,并注明每一次返回“<>>>>。 如果您在改动<>>>>>>>,结果_ messy。
www.un.org/Depts/DGACM/index_spanish.htm 这里是stackoverflow question,以证明这一点。
添加元素时的最坏情况是infinite loop,试图(或如果你能读一杯)在python REPL:
import random
l = [0]
for item in l:
l.append(random.randint(1, 1000))
print item
在记忆被使用或被系统/用户杀害之前,它将不停印数字。
理解内部原因,请讨论解决办法。 以下是几个方面:
1. make a copy of origin list
核对原产地清单并修改复印件。
result = l[:]
for item in l:
if somecond(item):
result.append(Obj())
2. control when the loop ends
您决定不对 p进行控制,而是决定如何整理名单:
length = len(l)
for index in range(length):
if somecond(l[index]):
l.append(Obj())
在编造之前,计算清单的长度,只计算出文件length
倍。
3. store added objects in a new list
不是修改原产地清单,而是在新清单中储存新物体,然后加以压缩。
added = [Obj() for item in l if somecond(item)]
l.extend(added)