小白python进击第二周3.列表生成式问题

今天学习中遇到一个问题 如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错,改进的后的如下图:

但是输出中没有包括整数。
所以我就改进了程序如下图:
版本1

版本2

 版本3

可以轻易看出后面两个版本是错的,为什么?
经过多方查询:

列表生成器

comprehension ::=  expression comp_for
comp_for      ::=  "for" target_list "in" or_test [comp_iter]
comp_iter     ::=  comp_for | comp_if
comp_if       ::=  "if" expression_nocond [comp_iter]

条件表达式

conditional_expression ::=  or_test ["if" or_test "else" expression]
expression             ::=  conditional_expression | lambda_expr
expression_nocond      ::=  or_test | lambda_expr_nocond
可以看出条件表达式没有for
条件表达式 / lambda表达式 + for 是列表生成器的一种形式。( Lambda 表达式 Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。)

其中s.lower() if isinstance(s,str) else s是条件表达式,这是列表生成器。
L= [s.lower() for s in L if isinstance(s,str) else s for s in L]
其中 s.lower() for s in L if isinstance(s,str) else s 不是条件表达式,
if isinstance(s,str) else s for s in L 也不是条件表达式,
而符合列表生成器的 comp_if ::= "if" expression_nocond [comp_iter] 。所以这也是列表生成器。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值