基本上,我在尝试避免在代码看起来像这样之前遍历大的数组:
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])我不想遍历列表两次,因为它消耗了太多的时间。我在想我可以做一个列表理解,但我不确定我是否在正确的轨道上
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的列表。你有什么办法让我做到这一点吗?或者更确切地说,我如何才能使第一块代码更高效?
发布于 2012-09-27 23:14:27
虽然列表理解的解释速度确实比常规循环快,但它们并不是万能的。我不认为你可以用列表理解来代替你的主for循环。然而,可能还有一些改进的空间:
time的列表。var的列表,并将其转换为np.array。var = np.array(t.replace(':',',') for t in time,dtype=float) var -= float(str(book).replace(":",",“))
bs,as构建4个数字整数数组(需要来重命名,as是一个Python然后可以过滤你的bs...具有奇特索引的数组:bs_reduced = bs(var < 0.1) & (var >=0)
发布于 2012-09-27 22:48:27
,我不想遍历列表两次,因为它消耗了太多的时间。我在想我可以做一个列表理解,但我不确定我是否在正确的轨道上
可能不会。列表理解除了遍历给定的列表之外什么也不做,所以它应该不会产生明显的差异。
https://stackoverflow.com/questions/12623835
复制相似问题