gpt4 book ai didi

python - 用列表理解替换循环,而不是循环获取函数以在列表理解中返回新数组

转载 作者:行者123 更新时间:2023-12-01 05:55:49 25 4
gpt4 key购买 nike

基本上,在我有如下所示的代码之前,我试图避免循环遍历大数组:

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 的所有实例进行分组,然后将值附加到新列表中。以我现在的方式,我认为它不会这样做,因为它只会继续创建长度为一的列表。关于如何实现这一目标有什么想法吗?或者更确切地说,我怎样才能使第一个代码块更有效?

最佳答案

虽然列表推导式的解释速度确实比常规循环更快,但它们并不能适用于所有情况。我不认为你可以用列表理解替换你的主 for 循环。但是,可能还有一些改进的空间:

  • 您可以通过列表理解构建您的时间列表。

    time = [ish[0] for ish in book]
  • 您可以通过列表理解计算 var 列表并将其转换为 np.array

    var = np.array([t.replace(':',',') for t in time], dtype=float)
    var -= float(str(book[0]).replace(":", ","))
  • 您可以为bs构建4个numpy int数组,as(您需要重命名,as 是 Python 关键字)...

  • 然后您可以使用奇特的索引过滤您的bs...数组:

    bs_reduced = bs[(var < 0.1) & (var >=0)]

关于python - 用列表理解替换循环,而不是循环获取函数以在列表理解中返回新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com