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