我将在python中写下这个伪代码:
if (i < .1):
doX()
elif (i < .3):
doY()
elif (i < .5):
doZ()
.
.
else:
doW()
数字范围可以是20,并且从列表中读取形成约束的每个浮点数。对于上面的示例(较短版本),它是列表:
[0.1, 0.3, 0.5, 1]
是否有任何pythonic方式或函数可以为不同的相关范围执行不同的功能?
答案 0 :(得分:3)
from bisect import *
a=[0.1, 0.3, 0.5, 1]
b=["a","b","c","d"]
print b[bisect_left(a,0.2)]
答案 1 :(得分:1)
这是一个你不应该使用的答案:
ggplot(foo, aes(x = a)) +
geom_line(aes(y = b, linetype = "b")) +
geom_line(aes(y = c, linetype = "c")) +
scale_linetype_manual(values = c(1,5))
关键是,对它的幻想变得难以理解。 if..elif..else是&#34; one - 最好只有一种 - 显而易见的方式。&#34; 。
答案 2 :(得分:1)
def a():
print('a returned')
def b():
print('b returned')
def c():
print('c returned')
funcs = [a, b, c]
def sample_func(x, funcs=None):
if x < 0:
return None
thresholds = [.40, .60]
for i, threshold in enumerate(thresholds):
if x <= threshold:
return funcs[i]()
return funcs[len(thresholds)]()
sample_func(.1, funcs)
返回
a returned
sample_func(.65, funcs)
返回
c returned
答案 3 :(得分:1)
我建议您创建以下字典,其中数字为键,函数为值:
d = {0.1:doX, 0.3:doY, 0.5:doZ, 1:doW}
然后使用以下代码:
for n,(k,f) in enumerate(sorted(d.items())):
if (i < k) or (n == (len(d) - 1)):
f()
break