通常将 for 循环表示为列表推导:
mylist=[]
for i in range(30):
mylist.append(i**2)
这相当于:
mylist = [i**2 for i in range(30)]
有没有什么机制可以通过while循环来完成这种迭代?
mylist=[]
i=0
while i<30:
mylist.append(i**2)
i+=1
当然,通过这个简单的示例,很容易转换为for
循环,然后转换为列表推导式,但如果不是那么容易怎么办?
例如
mylist = [i**2 while i=0;i<30;i++ ]
(当然上面的伪代码不是合法的python)(itertools
想到这种事情,但我不太了解那个模块。)
编辑
一个(非常简单的)我认为一段时间理解会很有用的例子是:
dt=0.05
t=0
mytimes=[]
while t<maxtime:
mytimes.append(t)
t+=dt
这可以转化为:
dt=0.05
t=0
nsteps=maxtime/dt
mytimes=[]
for t in (i*dt for i in xrange(nsteps)):
mytimes.append(t)
可以写成(复合)列表理解:
nsteps=maxtime/dt
mytimes=[t for t in (i*dt for i in xrange(nsteps)]
但是,我认为while循环更容易阅读(并且没有索引错误)另外,如果你的对象(dt)支持'+'但不支持'*'怎么办?maxtime
如果循环的每次迭代都以某种方式发生变化,则可能会发生更复杂的示例......