のサイズがの場合、コードのこの部分が縮尺されません。ループするときにリストから要素を削除する
私はデータをループして、毎回dt時間窓ごとに累積します。これを行うために、私は下限値と上限値を比較します。上限に達すると、効率的にループのためにを破ります。次回、私がループのためにを走らせるとき、私はその最初からではなく、効率のために私が以前に止めた要素から始めたいと思う。 どうすればいいですか?
リストの要素を削除/ポップしようとしましたが、インデックスがうまくいきません。私はリストを修正することはできませんが、私はループしていますが、私の目標は稀ではないようですので、解決策が必要です。私はオリジナルのデータリストについては後で私のコードで気にしません、私は自分の蓄積の最適化が欲しいだけです。
簡単な形で# Here I generate data for you to show my problem
from random import randint
import numpy as np
dimension = 200
times = [randint(0, 1000) for p in range(0, dimension)]
times.sort()
values = [randint(0, dimension) for p in range(0, dimension)]
data = [(values[k], times[k]) for k in range(dimension)]
dt = 50.0
t = min(times)
pixels = []
timestamps = []
# this is my problem
while (t <= max(times)):
accumulator = np.zeros(dimension)
for idx, content in enumerate(data):
# comparing lower bound of the 'time' window
if content[1] >= t:
# comparing upper bound of the 'time' window
if (content[1] < t + dt):
accumulator[content[0]] += 1
# if I pop the first element from the list after accumulating, indexes are screwed when looping further
# data.pop(0)
else:
# all further entries are bigger because they are sorted
break
pixels.append(accumulator)
timestamps.append(t)
t += dt
forループを独自の関数に分割すると、ループの開始インデックスをパラメータとして渡すことができます([range()](https://docs.python.org/2/library) /functions.html#range)をループ内に追加します)。その後、ループを再開すると、終了した索引からループを呼び出すことができます。最初に関数を呼び出してゼロを渡します。このパラメータは、rangeと呼ぶ最初のパラメータにもなります。 –
要素を削除する場合は、後ろにループしたり、リストのコピーを作成したり、リストの理解を使用したりできます。 [this](http://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating-in-python) –
ありがとう!私はrange()が私の心に来なかったので、もっとPythonの練習が必要です。私はC++の反復子を見つけようとしていました。 – beginh