我有一个 lnprior 函数,它应该根据我想要适合的参数进行更改,而有些则保持固定。假设我有
p0 = [1,20]
p1 = [[0,2],[10,30]]
基本上我有:
a, b = p0
a_, b_ = p1
if (a_[0] < a < a_[1]) and (b_[0] < b < b_[1]):
然而,p0
和 p1
可以有一个变化的维度,例如
p0 = [1,20, 300]
p1 = [[0,2],[10,30],[200, 400]]
在这种情况下,IF 条件应该是:
a, b, c = p0
a_, b_, c_ = p1
if (a_[0] < a < a_[1]) and (b_[0] < b < b_[1]) and (c_[0] < c < c_[1])
有没有办法根据p0
的大小自动创建IF语句(在我的实际代码中p0
是一个字典,可能更容易操作)?
答案 0 :(得分:1)
类似于 Selcuk's answer,但我认为更具可读性:
all(low < value < high for value, (low, high) in zip(p0, p1))
这会压缩列表以将值与其上限和下限相关联,然后遍历所有对并测试 value
是否介于 low
和 high
值之间。 all()
确保所有值都在各自的范围内。
>>> p0 = [1, 20, 300]
>>> p1 = [[0, 2], [10, 30], [200, 400]]
>>> all(low < value < high for value, (low, high) in zip(p0, p1))
True
>>> p0 = [1, 10, 300]
>>> all(low < value < high for value, (low, high) in zip(p0, p1))
False
>>>
答案 1 :(得分:0)
是的。不要手动解压 p0
和 p1
,而是使用带有 generator expression 的 all()
:
if all(p1[i][0] < p0[i] < p1[i][1] for i in range(len(p0))):
...