基本的に、次のようなコードを作成する前に、大きな配列をループしないようにしています。
for rows in book:
bs = []
as = []
trdsa = []
trdsb = []
for ish in book:
var = (float(str(ish[0]).replace(':',"")) - float(str(book[0]).replace(':',"")))
if var < .1 and var > 0 :
bs.append(int(ish[4]))
as.append(int(ish[5]))
trdsa.append(int(ish[-2]))
trdsb.append(int(ish[-1]))
time = ish[0]
bflow = sum(numpy.diff(bs))
aflow = sum(numpy.diff(as))
OFI = bflow - aflow - sum(trdsb) + sum(trdsa)
OFIlist.append([time,bidflow,askflow,OFI])
時間がかかりすぎるため、リストを2回ループしたくありません。リストの理解ができると思っていましたが、正しい軌道に乗っているかどうかわかりません
OFIcreate(x,y):
bs = []
as = []
trdsa = []
trdsb = []
var = (float(str(y[0]).replace(':',"")) - float(str(x[0]).replace(':',"")))
if var < .1 and var >= 0 :
bs.append(int(ish[4]))
as.append(int(ish[5]))
trdsa.append(int(ish[-2]))
trdsb.append(int(ish[-1]))
time = ish[0]
bflow = sum(numpy.diff(bs))
aflow = sum(numpy.diff(as))
OFI = bflow - aflow - sum(trdsb) + sum(trdsa)
OFIlist.append([time,bidflow,askflow,OFI])
return OFIlist
OFIc = [ OFIcreate(x,y) for x in book for y in book)
問題は、リストをループして、var >=0 および var <.1 のすべてのインスタンスをグループ化し、値を新しいリストに追加することです。私が今持っている方法では、長さが1のリストを作成し続けるだけなので、そうは思わない. これを達成する方法についてのアイデアはありますか? むしろ、コードの最初のブロックをより効率的にするにはどうすればよいでしょうか?