关于python 列表推导式 if else 组合

关于python列表推导式中if else中始终不太理解,求大神知道
具体如代码如下

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

最终输出结果为[3,4]
按照我的理解,cnum=5,满足if条件,那么应该是list_range[2],即输出的值应为为3,现在输出的是[3,4]
百思不得其解啊,难道满足条件后, cnum-3的值将 0:cnum-1前面的0替换了?

阅读 3.8k
2 个回答

list_range[(cnum-3) if (cnum-3)>0 else 0:cnum-1] 仔细看下,这是一个范围,有start和end

  • cnum = 5,所以if else 返回 true,即start=cnum-3=2
  • end=cnum-1 = 5-1 = 4
  • 最终表达式:list_range[2:4],所以是[3,4]
(cnum-3) if (cnum-3)>0 else 0:cnum-1

这句得拆开看啊. 等价于:

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

咱把 cnum = 5 带入, 给运算一下:

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

等于:

( 2 > 0 ? 2 : 0 ) : 4

最终就是:

list_range[2 : 4]

于是输出 [3, 4]. 木有问题呀.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题