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
この種のことについて思い浮かびますが、私はそのモジュールをひどくよく知りません。)
編集
while 内包表記が役立つと思われる (非常に単純な) 例は次のとおりです。
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 ループの方がはるかに読みやすい (インデックス エラーがない) と主張したいと思います。maxtime
ループの反復ごとに何らかの方法で変更すると、より複雑な例が発生する可能性があります...