小白python进击第二周3.列表生成式问题
2016-04-21 23:07
330 查看
今天学习中遇到一个问题:如果list中既包含字符串,又包含整数,由于非字符串类型没有
但是输出中没有包括整数。
所以我就改进了程序如下图:
版本1
版本2
版本3
可以轻易看出后面两个版本是错的,为什么?
经过多方查询:
列表生成器
条件表达式
可以看出条件表达式没有for
条件表达式 / lambda表达式 + for 是列表生成器的一种形式。(Lambda
表达式 Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。)
其中s.lower() if isinstance(s,str) else s是条件表达式,这是列表生成器。
其中
而符合列表生成器的
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]。所以这也是列表生成器。
相关文章推荐
- 用python实现把数字人民币金额转换成大写的脚本程序
- Python菜鸟学习手册16----多进程
- Python语言集成开发环境搭建
- Python之Django--ORM连表操作
- python 多维数组的初始化生成
- Python排序算法之冒泡排序
- Python IO编程——学习笔记
- python中OS模块获得文件路径的流程
- python 内置函数
- python 统计词频
- Python错误、调试和测试——学习笔记
- Python之前端
- python numpy使用
- Python面向对象高级编程——学习笔记
- IPython和Jupyter Notebook 简介
- Python之线程池
- python中 pip install scrapy
- Python之Web框架们
- Python面向对象编程——学习笔记
- Python多线程join的用法