鍍金池/ 問答/Python/ 關(guān)于python 列表推導(dǎo)式 if else 組合

關(guān)于python 列表推導(dǎo)式 if else 組合

關(guān)于python列表推導(dǎo)式中if else中始終不太理解,求大神知道
具體如代碼如下

list_range=[1,2,3,4,5]
cnum=5
list_range[(cnum-3) if (cnum-3)>0 else 0:cnum-1]

最終輸出結(jié)果為[3,4]
按照我的理解,cnum=5,滿足if條件,那么應(yīng)該是list_range[2],即輸出的值應(yīng)為為3,現(xiàn)在輸出的是[3,4]
百思不得其解啊,難道滿足條件后, cnum-3的值將 0:cnum-1前面的0替換了?

回答
編輯回答
若相惜

list_range[(cnum-3) if (cnum-3)>0 else 0:cnum-1] 仔細(xì)看下,這是一個(gè)范圍,有start和end

  • cnum = 5,所以if else 返回 true,即start=cnum-3=2
  • end=cnum-1 = 5-1 = 4
  • 最終表達(dá)式:list_range[2:4],所以是[3,4]
2018年4月15日 09:54
編輯回答
撥弦
(cnum-3) if (cnum-3)>0 else 0:cnum-1

這句得拆開看啊. 等價(jià)于:

( (cnum-3) if (cnum-3) > 0 else 0) ) : (cnum-1)

咱把 cnum = 5 帶入, 給運(yùn)算一下:

( (5-3) if (5-3) > 0 else 0) ) : (5-1)

等于:

( 2 > 0 ? 2 : 0 ) : 4

最終就是:

list_range[2 : 4]

于是輸出 [3, 4]. 木有問題呀.

2018年1月19日 10:13