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

Python中连接多个布尔检查的正确语法是什么?,python,python-2.7,Python,Python 2.7,因此,我正在寻找一种速记方法: if a == 5 or a == 6 or a == 7: 让它像这样: if a == (5 or 6 or 7): 现在,我知道我可以做到: if a in [5,6,7]: 但是我正在寻找一种更通用的方法,当元素不能很容易地放入列表时(例如,如果它们是长变量名,或者每个元素本身就是一个列表) 我也知道any()函数,但这并不能很好地清理它(对于每个条件,我仍然需要一个=) 可以这样做吗?正确的语法是什么 EDIT:我知道这可以通过一系列方法来实现

因此,我正在寻找一种速记方法:

if a == 5 or a == 6 or a == 7: 
让它像这样:

if a == (5 or 6 or 7): 
现在,我知道我可以做到:

if a in [5,6,7]:
但是我正在寻找一种更通用的方法,当元素不能很容易地放入列表时(例如,如果它们是长变量名,或者每个元素本身就是一个列表)

我也知道
any()
函数,但这并不能很好地清理它(对于每个条件,我仍然需要一个
=

可以这样做吗?正确的语法是什么


EDIT:我知道这可以通过一系列方法来实现,但我要特别询问的是如何将比较链接在一起,如第二个snipit所示常用的语法是
x in
,如您所述

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]:
在我看来,在中最清楚地使用
涉及到预先计算右侧列表:

if my_answer in list_of_correct_answers:

如果您能够在其他地方构建列表,那么对于您提到的每种情况,都可以完全阅读。

如您所述,常用的语法是
x in

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]:
在我看来,在
中最清楚地使用
涉及到预先计算右侧列表:

if my_answer in list_of_correct_answers:

如果您能够在其他地方构建列表,那么对于您提到的每种情况,都可以完全阅读。

如您所述,常用的语法是
x in

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]:
在我看来,在
中最清楚地使用
涉及到预先计算右侧列表:

if my_answer in list_of_correct_answers:

如果您能够在其他地方构建列表,那么对于您提到的每种情况,都可以完全阅读。

如您所述,常用的语法是
x in

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]:
在我看来,在
中最清楚地使用
涉及到预先计算右侧列表:

if my_answer in list_of_correct_answers:
如果您能够在其他地方构建列表,那么对于您提到的每一个案例来说,这都是完全可读的。

python方法是

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
蟒蛇的方式是

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
蟒蛇的方式是

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
蟒蛇的方式是

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

通常,您可以始终使用
in
运算符进行此操作。如果要在嵌套列表中查找内容,可以始终使用。老实说,现在我想不出我们不能使用列表的情况

例如:

>>> 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

你的问题的答案是,像第二段那样做?否。

通常,您可以始终使用
中的
运算符进行此操作。如果要在嵌套列表中查找内容,可以始终使用。老实说,现在我想不出我们不能使用列表的情况

例如:

>>> 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

你的问题的答案是,像第二段那样做?否。

通常,您可以始终使用
中的
运算符进行此操作。如果要在嵌套列表中查找内容,可以始终使用。老实说,现在我想不出我们不能使用列表的情况

例如:

>>> 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

你的问题的答案是,像第二段那样做?否。

通常,您可以始终使用
中的
运算符进行此操作。如果要在嵌套列表中查找内容,可以始终使用。老实说,现在我想不出我们不能使用列表的情况

例如:

>>> 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


你的问题的答案是,像第二段那样做?否。

您能否详细说明哪些事情“不容易放入列表”,以及为什么您认为这很困难?
中的
适用于大多数情况。您始终可以通过编程方式构造集合来检查成员身份,而不是对一组值进行硬编码。如果您想轻松地检查多个序列,还可以使用
itertools.chain
之类的工具。除此之外,更专业的用例需要更专业的解决方案。作为@Robᵩ 比如说,你能给出一些你需要解决的问题的例子吗?另外,如果你对集合进行硬编码以检查其成员身份,只要所有成员都是可散列的,那么使用
集合
而不是
列表
是一个好习惯。对于像这样的琐碎情况,这无关紧要,但对于较大的集合,集合的O(1)查找与列表的O(n)查找相比会有所不同。@Robᵩ 因此,无法轻松将事情放入列表的情况是没有意义的,因为我在询问其他事情。正如我所说,我知道
if in
工作得非常好,但我正在寻找一种方法,将等式条件链接在一起,如果它存在的话。我会试着修改这个问题,使之更清楚@SilasRay您能详细说明一下什么是
itertools.chain
吗?长变量名不是语言问题,而是编辑器问题。您能详细说明哪些内容“不容易放入列表”,以及为什么您认为这很难吗?
中的
适用于大多数情况。您始终可以通过编程方式构造集合来检查成员身份,而不是对一组值进行硬编码。如果您想轻松地检查多个序列,还可以使用
itertools.chain
之类的工具。除此之外,更专业的用例需要更专业的解决方案。作为@Robᵩ