我正在嘗試學習串列理解法和迭代器的條件。 我的問題是,我不明白我的if/else條件是如何在這個串列上起作用的,哪個if或el首先起作用并列印。
num1 = [5, 10, 15]
num2 = [i**2 if i == 10 else i - 5 if i < 7 else i 5 for i in num1 ]
print(num2)
輸出:
[0, 100, 20]
uj5u.com熱心網友回復:
你在這里得到的不是一個帶條件的串列理解(它過濾掉了理解中的一些元素),而是一個后運算式條件,其形式為
x = A if (條件) else B
如果(condition)為真,這就分配了A,否則就分配了B。(必須承認,這個語法看起來有點混亂,但即使是Python也不總是完美的。你設法把兩個這樣的東西疊在一起,就像這樣:
i**2 ifi == 10 else (i-5 ifi < 7 else i 5)
從右邊讀。運算式(i-5 if i < 7 else i 5)如果i<7,將得到i-5,否則得到i 5。無論這個值是什么,只要i==10為假,它就會被包含在理解中(所以,對于第一個和第三個串列元素)。
注意,這個結構與串列理解無關;你可以在任何地方使用它(只要i被定義)。
i = 31
x = i**2 if i == 10 else (i-5 ifi < 7 else i 5)
作為比較,這里是一個真正的條件式串列理解。該理解將洗掉等于10的值,在結果中留下兩個元素。我認為這就是你所要理解的結構。
num3 = [ i**2 for i in num1 if i ! = 10 ]
uj5u.com熱心網友回復:
為了真正理解這個嵌套的三元組是如何作業的,你可以寫出等價的分支陳述句:
num2 = [] 。
for i in num1:
val = i
if i == 10:
val **= 2 elif i < 7:
val -= 5 :.
else:
val = 5 else: val = 5
num2.append(val)
注意,無論i是什么,val總是被分配一個值。這是對三元運算式的一個要求。
一般來說,三元運算式的形式是
x = expr_if_true if some_condition else expr_if_false
這等同于
if some_condition:
x = expr_if_true
else:
x = expr_if_false
注意 expr_if_true 和 expr_if_false 可以是 任何有效的 Python 運算式,包括其他三元運算式。這就是三元運算式可以嵌套的機制,這特別是因為三元運算式總是有一個回傳值。
綜上所述,這是一種糟糕的撰寫代碼的方式。三元運算式應該被限制在一個級別,也許是一個級別的嵌套,如果它可以被簡明地寫出來并且容易閱讀。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/329410.html
標籤:
