Pythonで関数を書こうとしています。この機能はアルゴリズムに基づいています。n辺を持つ多角形の辺を使った総和です。「ループ」ごとに、n[i]+n[1+i] を追加します。Pythonでは、forループでこれを行うことができますか? これは、Java や C++ などの言語で行うのは非常に簡単です。しかし、Python の for ループの性質上、あまり明白ではありません。for ループでこれを実現できますか、それとも while ループを使用する必要がありますか?
2 に答える
3
zip
ここで for ループを使用できます。
>>> lis = range(10)
>>> [x+y for x, y in zip(lis, lis[1:])]
[1, 3, 5, 7, 9, 11, 13, 15, 17]
リストが膨大な場合は、itertools.izip
andを使用できiter
ます。
from itertools import izip, tee
it1, it2 = tee(lis) #creates two iterators from the list(or any iterable)
next(it2) #drop the first item
print [x+y for x, y in izip(it1, it2)]
#[1, 3, 5, 7, 9, 11, 13, 15, 17]
于 2013-11-07T15:58:06.083 に答える
1
for i in range(N): # i = 0,1, ... N-1
val = n[i] + n[i+1]
「ラップアラウンド」したい場合は、次のように書くことができます
for i in range(N): # i = 0,1, ... N-1
val = n[i] + n[(i+1)%N]
.. または n[-1] が最後の要素と同じであるという事実を使用する
for i in range(N): # i = 0,1, ... N-1
val = n[i-1] + n[i] # [N-1]+[0], [0]+[1], ... [N-2] + [N-1]
このアプローチは遅くなる可能性がありますが、zip や反復よりも簡単に実行できる可能性があります。
于 2013-11-07T16:00:51.850 に答える