您的位置:首页 > 编程语言 > Python开发

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

2016-04-21 23:07 330 查看
今天学习中遇到一个问题:如果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]
。所以这也是列表生成器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: