我想檢查一個專案是否在串列中,如果沒有,我想將它附加到串列中。
通常我會這樣寫:
if item not in list:
list.append(item)
else:
pass
但是,我已經到了嘗試使代碼更短的地步,并得到了這個:
list.append(item) if item not in list else list
公平地說,如果專案不在串列中,則只有list.append(item)是我自己創建的。在其他的陳述句是由于PyCharm的堅持。現在我的問題是:為什么我不能用pass跟進else陳述句,而是必須寫串列。我無法理解它,谷歌也沒有幫助。
感謝您的澄清。
uj5u.com熱心網友回復:
if 陳述句和條件運算式之間存在差異。
當你寫
if condition:
this()
else:
that()
你正在寫一份宣告。它是一個命令式結構——它做了一些事情。該else位是可選的;如果省略,則如果條件不滿足,陳述句將不執行任何操作。
該this if condition else that構建體是表達。它計算一個值。它總是必須計算一個值,所以else位必須在那里。將它用于它的副作用,例如通過呼叫`list.append(),它不會回傳任何有用的東西,是......不是完全錯誤,但是......好吧,它是錯誤的。不是技術上的,而是哲學上的。
因此,當您想以兩種可能的方式之一計算一個值,并且整個事情都適合一行左右時,請使用條件運算式。如果您想做兩件事中的任何一件,其中一件可能什么都不是,請使用 if 陳述句。
注意你寫
if temperature < 0:
coat = thick
else:
coat = thin
但
coat = thick if temperature < 0 else thin
在第一種情況下,您有一個 if 陳述句,用于選擇要執行的兩個賦值陳述句中的哪一個。在第二種情況下,您只有一個賦值陳述句,它使用條件運算式來決定要賦值的值。
運算式可以用作陳述句(在這種情況下,它們的值被簡單地忽略),但陳述句沒有值,因此不能用作運算式。
uj5u.com熱心網友回復:
在您的第一個片段中,該else陳述句是多余的,即
if item not in a_list:
list.append(item)
足夠了,并且盡可能簡短和慣用(盡管您可能想嘗試性能集)。
在第二個片段中,您使用條件運算式附加到串列,這不是這些運算式的用途。無論條件如何,條件運算式都必須具有值,并且pass不是值。除非您需要根據條件計算值,否則請使用上述條件陳述句。
uj5u.com熱心網友回復:
來自檔案(也由 Pycharm 提供):
pass is a null operation — when it is executed, nothing happens. It is useful as a placeholder when a statement is required syntactically, but no code needs to be executed, for example:
def f(arg): pass # a function that does nothing (yet)
在 python 中,如果您使用ternary運算子解釋是不允許的,所以在其他情況下您需要做一些事情
所以你的解決方案是:
if item not in list:
list.append(item)
或者使用 set()
set.add(item)
uj5u.com熱心網友回復:
您可以使用and運算子進一步縮短代碼
item not in list and list.append(item)
它只會list.append(item)在item not in list回傳時執行True
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/347696.html
