我正在尝试创建一个if else代码,其中elif有大约20个条件,我如何创建一个条件列表,我可以输入如下内容:
uno= <9
lol= >20
crad= =<3
list={uno,lol,crad}
if 13=list:
print("yay")
elif 13!=list:
print("nay")
这是我目前的代码 它应该打印&#34; yay&#34;而不是语法错误
答案 0 :(得分:7)
它实际上并不比编写if
/ elif
/ elif
等链更简单,但这样的事情似乎就是你所要求的:
predicates = [lambda x: x<9, lambda x: x>20, lambda x: x<=3]
if all(y(13) for y in predicates):
print("yay")
else:
print("nay")
每个谓词都是一个小的匿名函数(lambda
),它接收一个参数并评估为True
或False
。如果你有大量的参数需要检查大量的谓词,那么能够像这样封装谓词是很好的。从列表中以编程方式添加或删除谓词的能力确实扩展了此构造的多功能性,超出了if
/ elif
/ elif
所能做到的(轻松,自然)。
对于单个数字,这个特定的谓词集不可能都是真的。也许你想要any()
而不是all()
......?
答案 1 :(得分:3)
你的条件&#34;是将输入映射到布尔值的函数。因此,您可以将它们写为函数:
def is_small(number):
return number < 9
def is_large(number):
return number > 20
conditions = (is_small, is_large)
然后你可以在某些输入上评估所有这些函数:
def check_all(input, conditions):
return [condition(input) for condition in conditions]
check_all(10, conditions)
>>> [False, False]
如果你想知道所有这些或其中任何一个是否属实,你可以使用函数all
和any
:
any(check_all(10, conditions))
>>> False
any(check_all(21, conditions))
>>> True
如果其中一个条件未满足,则not all(…)
为True,如果没有,则not any
为True。
编辑:有一点需要注意的是[… for … in …]
中的列表推导check_all
总是评估所有函数。如果您使用any
或all
,则不需要这样做,它可以使用迭代器并停止对其修复的结果进行评估(在True
的{{1}}处, any
的第一个False
。如果您使用它们,则只需用生成器表达式all
替换列表推导[… for … in …]
。
答案 2 :(得分:1)
你可以创建一个布尔元组并通过yAxis: [{
labels: {
align: 'right',
x: -3
},
title: {
text: 'OHLC'
},
height: '60%',
lineWidth: 2,
resize: {
enabled: true
}
}, {
labels: {
align: 'right',
x: -3
},
title: {
text: 'Volume'
},
top: '65%',
height: '35%',
offset: 0,
lineWidth: 2
}, {
labels: {
align: 'right',
x: -3
},
title: {
text: 'Volume2'
},
top: '65%',
height: '35%',
offset: 0,
lineWidth: 2
}],
series: [{
type: 'candlestick',
name: 'AAPL',
data: ohlc,
dataGrouping: {
units: groupingUnits
}
}, {
type: 'column',
name: 'Volume',
data: volume,
yAxis: 1,
dataGrouping: {
units: groupingUnits
}
}, {
type: 'column',
name: 'Volume1',
data: volume,
yAxis: 2,
dataGrouping: {
units: groupingUnits
}
}]
进行检查。
all