x (> 如果 bool else <) y



我正在寻找一个逻辑使用一个函数与不同的操作符。

是否有一种方法来实现逻辑,使用布尔值来确定比较中的操作符?

之类的东西
while df["column"][i + period] (> if bool_var else <=) min(df["column"])

编辑:谁能明确地告诉我该逻辑将如何与操作符模块实现?

while operator.gt(a, b) if bool_var else operator.eq(a, b): ?

为了避免在您的if/else分支中重复块,您所需要的是根据positive标志和由操作符模块创建的比较操作符更改您的while语句:

from operator import eq, gt
def check_trends(df, set_lenght, positive=True, get_index=False):
periods = []
op = gt if positive else eq  # select operator

for i in range(len(df.index)):
period = 0
while op(df["perc_btc"][i + period], min(df["perc_btc"])):
if len(df.index) <= (i + period + 1):
break
period += 1
if period > set_lenght:
periods.append([i, period])
if get_index:
return [i, i + period]  # returns the last starting point
return periods

另一种方法是进行两个单独的比较,每个取决于newbool。本例中adf["column"][i + period],bmin(df["column"]

>>> newbool = True
>>> a = 4
>>> b = 5
>>> (a>b and newbool) or (a<=b and not newbool)
False
>>> newbool = False
>>> (a>b and newbool) or (a<=b and not newbool)
True
>>> a = 6
>>> (a>b and newbool) or (a<=b and not newbool)
False
>>> newbool = True
>>> (a>b and newbool) or (a<=b and not newbool)
True
>>>

df["column"][i + period]

可以写成

df.loc[i+period,"column"]

如果它可以,它应该是。不同的索引选择。


为了防止while语句太长,可以将术语赋值给循环前面和末尾的名称。

a = df.loc[i+period,"column"]>min(df["column"]
b = min(df["column"]
while (a>b and newbool) or (a<=b and not newbool)):
# all the other stuff
...
a = df.loc[i+period,"column"]
b = min(df["column"])

相关内容

  • 没有找到相关文章

最新更新