繁体   English   中英

在Python中连接多个布尔检查的正确语法是什么?

[英]What is the Correct Syntax for Connecting Multiple Boolean Checks in Python?

因此,我正在寻找一种简便的方法:

if a == 5 or a == 6 or a == 7: 

拥有这样的东西:

if a == (5 or 6 or 7): 

现在,我知道我可以这样做:

if a in [5,6,7]:

但是我正在寻找一种更通用的东西,当元素不能轻易地放入列表中时(例如,如果它们是长变量名,或者每个元素本身都是列表)

我也知道any()函数,但是并不能将其清理得太多(我仍然必须为每个条件设置== )。

可以做到这一点,正确的语法是什么?

编辑:我知道这可以简单地用一堆方法来完成,但是我要特别问一下如何将比较链接在一起,如第二个snipit所示。

如前所述,通常推荐的语法是x in <list>

if a in [5,6,7]:

您认为不合适的案例效果很好:

# Long names
if a in [the_first_of_november,
         the_second_sunday_in_the_third_lunar_month,
         tuesday]: 


# Lists:
if myList in [yourList, hisList, herList]:

在我看来, in的最清晰用法是预先计算右侧列表:

if my_answer in list_of_correct_answers:

如果您能够在其他位置构建列表,则对于您提到的每种情况,这都是完全可读的。

通常,您始终可以使用in运算符。 如果要在嵌套列表中查找内容,则始终可以使用itertools.chain.from_iterable 老实说,现在我想不起来不能使用列表的情况。

例如:

>>> my_list = [[1,2,3],[4,5,6], 6, 7, 2, 3, 'abc']
>>> n = 5
>>> n in itertools.chain.from_iterable(my_list)
True
>>> 
>>> s = 'a' #You can even find if a char exists in the list
>>> s in itertools.chain.from_iterable(my_list)
True

而您的问题的答案,是否如第二个片段所示? 没有。

pythonic方式是

if a in (5, 6, 7):
if a in [5, 6, 7]:

第一个也是正确的:

if a == 5 or a == 6 or a == 7:

第二条语句不执行您认为的操作:

bool(6 == (5 or 6 or 7))
Out[1]: False

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM