【发布时间】:2021-01-21 01:27:30
【问题描述】:
挑战: 我想知道逻辑何时从 HIGH(1) 变为 LOW (0),反之亦然。
数值示例:
- 当输入值 = 3.5 时,以 0.05 的步长将数据从 0 刷到 5,逻辑从 LOW(0) 变为 HIGH (1)。
- arr = [0, 0.05..3.5..5]
- 当 arr 中的值 = 3.5。状态变为 HIGH(1)
- 当输入值 = 2.5 时,以 0.05 的步长将数据 5 刷到 0,逻辑从 HIGH (1) 变为 LOW(0)。
- arr = [5, 4.95..2.5..0]
- 当 arr 中的值 = 2.5 时。状态变为 LOW(0)
下面是我的功能代码:
def get_state(value):
if value > 3.5:
return 1
if value < 2.5:
return 0
def find_state_changed(arr):
low_state = get_state(min(arr))
high_state = get_state(max(arr))
for up in arr:
if get_state(up) != low_state:
LowHigh = up
break
for low in arr[::-1]:
if get_state(low) != high_state:
HighLow = low
break
return LowHigh, HighLow
low = 0
high = 5
iteration = 100
step = (high - low)/iteration
arr = [round(i * step,2) for i in list(range(iteration+1))]
print(find_state_changed(arr))
需要帮助:
我的一位同事提到它可以用binary search 来完成我试图将它集成到我的代码中,但惨遭失败...... 如果有人知道,是否可以在此代码中使用二进制搜索或者有更有效的方法,请告诉我。
【问题讨论】:
-
总结您的代码返回 2 个浮点数的数组中的位置(索引)。这是其他地方逻辑的开关值。您一直使用的数组是排序的,并且总是有 2 个开关(一个向上一个向下)按数组(既不多也不少)?
-
@RomainL.是的,你完全正确!
-
那我不明白你为什么不使用内置的python。索引方法似乎符合你的需求。它返回元素的第一个索引。例如。 arr.index(3.5), arr[::-1].index(2.5)。如果这不是您要查找的内容,请解释为什么它不适用于您的情况。
-
@RomainL。实际上,在实际情况下,我不知道它将从高切换到低然后从低切换到高的值,它大约在 2.5 和 3.5 之间。
标签: python python-3.x binary-search