参考:http://www.opython.com/343.html

31 列表推导式(List Comprehension)

形如 lst = [x * x for x in range(1, 7)] 称为列表推导式

除了迭代取出元素和设定计算方法形成列表,列表推导式还能够设置条件,满足条件的元素才能够经过计算添加到列表。

列表推导式组成:[元素(或计算方法) for循环(允许多个) if语句]

示例代码:

lst = [x * x for x in range(1, 7) if x % 2 == 0]  # 列表推导式:循环获取范围1~6的整数,符合条件时,计算乘积后添加到新列表。
print(lst)  # 显示输出结果为:[4, 16, 36]
列表推导式的循环问题:

在列表推导式中有多个循环式,出现的是嵌套循环的效果,而非同步循环。

示例代码(嵌套循环):
number = [1, 2, 3, 4, 5, 6]  # 整数列表
square = [1, 4, 9, 16, 25, 36]  # 平方列表
lst = ['{0}²={1}'.format(str(x), str(y)) for x in number for y in square if x <= 3]
print(lst)

Python 字符串format()格式化函数:
format 函数可以接受不限个参数,位置可以不按顺序。

基本语法:

>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'>>> "{0} {1}".format("hello", "world")  # 设置指定位置
'hello world'>>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
'world hello world'print("姓名:{name}, 年龄:{age}".format(name='Lo',age='21'))
姓名:Lo, 年龄:21

还可以传入对象、格式化数字等,详情参考:https://www.runoob.com/python/att-string-format.html

输出结果:

['1²=1', '1²=4', '1²=9', '1²=16', '1²=25', '1²=36', '2²=1', '2²=4', '2²=9', '2²=16', '2²=25', '2²=36', '3²=1', '3²=4', '3²=9', '3²=16', '3²=25', '3²=36']
示例代码(同步循环):
number = [1, 2, 3, 4, 5, 6]  # 整数列表
square = [1, 4, 9, 16, 25, 36]  # 平方列表
lst = ['{0}²={1}'.format(str(x), str(y)) for x in number for y in square if x <= 3 and x * x == y]
print(lst) # 显示输出结果为:['1²=1', '2²=4', '3²=9']

等价于以下代码:

number = [1, 2, 3, 4, 5, 6]
square = [1, 4, 9, 16, 25, 36]
lst = [] # 此部分用列表推导式替代
for x in number: # 此部分用列表推导式替代for y in square: # 此部分用列表推导式替代if x <= 3 and x * x == y: # 此部分用列表推导式替代lst.append('{0}²={1}'.format(str(x), str(y))) # 此部分用列表推导式替代
print(lst)

32 lambda表达式

lambda表达式的官方定义:一个匿名内联函数,由一个表达式组成,在函数被调用时求值。

创建lambda函数的语法: lambda [参数] : 表达式

lambda表达式可用于函数的参数。

示例代码(实现序列中偶数判断):

def iseven(n):  # 定义验证数字是否偶数的函数if n % 2 == 0:  # 判断参数是否为偶数return True  # 符合条件返回真值else:return False #否则返回假值lst = list(filter(iseven, number)) # 通过函数iseven对每个number的元素进行验证,验证为真的保留,并将最终结果转换为list。
print(lst) # 显示输出结果为:[2, 4, 6]

等价代码:

number = [1, 2, 3, 4, 5, 6]  # 整数列表lst = list(filter(lambda x: x % 2 == 0, number)) # 通过lambda表达式对每个number的元素进行验证,并将所有验证结果转换为list。
print(lst) # 显示输出结果为:[2, 4, 6]

上方代码中,每一个number的元素都会作为lambda表达式的参数(冒号前面的x)进行验证,如果符合条件(冒号后方的表达式),则会保留元素。

Python3 filter()函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list()。 来转换。filter()函数接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

基本语法:filter(function, iterable),

function为判断函数,iterable 为可迭代对象。

def is_odd(n):return n % 2 == 1tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
newlist = list(tmplist)
print(newlist)

PS:关于一段代码的运行

示例代码:

name_set = {'邢佳栋', '李学庆', '高昊', '潘粤明', '戴军', '薛之谦', '贾宏声', '于波', '李连杰', '王斑', '蓝雨', '刘恩佑', '任泉', '李光洁', '姜文', '黑龙', '张殿菲', '邓超', '张杰', '杨坤', '沙溢', '李茂', '黄磊', '于小伟', '刘冠翔', '秦俊杰', '张琳', '陈坤', '黄觉', '邵峰', '陈旭', '马天宇', '杨子', '邓安奇', '赵鸿飞', '马可', '黄海波', '黄志忠', '李晨', '后弦', '王挺', '何炅', '朱亚文', '胡军', '许亚军', '张涵予', '贾乃亮', '陆虎', '印小天', '于和伟', '田亮', '夏雨', '李亚鹏', '胡兵', '王睿', '保剑锋', '于震', '苏醒', '胡夏', '张丰毅', '刘翔', '李玉刚', '林依轮', '袁弘', '朱雨辰', '丁志诚', '黄征', '张子健', '许嵩'}print(list(filter(lambda x: x[0] == '李', [x for x in name_set])))

如果报错提示识别不了utf-8字符,是因为py默认用acsii编码,要在脚本第二行加上utf-8编码,必须是第二行!

上述代码意为选出序列中姓李的人并形成新序列,因为不是编码问题的编码问题浪费了很多时间,希望后来人如果有看到的注意,避开我们踩过的坑,同行才能走得更远,也更快!

PythonNote7_List Comprehension(列表推导式)和lambda表达式相关推荐

  1. 三元表达式、列表推导式、生成器表达式、递归、内置函数、匿名函数

    一.三元表达式 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' print(res) 二.列表推导式和生成器表达式 #老 ...

  2. 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数(day4)

    一.三元表达式.列表推导式.生成器表达式 1.三元表达式name=input('姓名>>: ')res='SB' if name == 'alex' else 'NB'print(res) ...

  3. 列表推导式与生成表达式的区别

    阅读目录 列表推导式与生成式表达式的区别: #列表推导式 -------------------------------------------------------------------- 注: ...

  4. python 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

    一.三元表达式 语法:[成立1 if condition1 else成立2 if condition2 else ...if 成立N conditionN else 不成立] sex = 'man' ...

  5. Python--三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数...

    三元表达式 列表推导式 生成器表达式 递归与二分法 匿名函数 内置函数 一.三元表达式 name=input('姓名>>: ') res='True' if name == 'lee' e ...

  6. python列表推导式格式_Python列表推导式(for表达式)及用法

    for 表达式(列表推导式)用于利用其他区间.元组.列表等可迭代对象创建新的列表. for 表达式的语法格式如下:[表达式 for 循环计数器 in 可迭代对象] 从上面的语法格式可以看出,for 表 ...

  7. Python 三元表达式、列表推导式、生成器表达式

    一.三元表达式 三元表达式,也称为if,else的紧凑形式.具体用法如下: def max(a,b):if a>b:return aelse:return bdef max(a,b):retur ...

  8. 六、Python之三元表达式、列表推导式、生成器表达式

    1.三元表达式 #example1 x = 10 y = 20 res = x if x > y else y print(res) #example2 name = 'abc' res = ' ...

  9. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

最新文章

  1. centos 创建 logrotate 进行日志分割
  2. VTK:可视化之CaptionActor2D
  3. TCP/IP 三次握手和四次挥手
  4. 2007年上半年软件测试_洪恩教育成功登陆纽交所,上市首日大涨超33%!成2020年首家美股上市的中国教育公司...
  5. TCP/IP 三次握手
  6. python数组内运算_有效的数学运算在Python中用cython进行小数组运算
  7. swift拖放的按钮如何在后台设置点击事件 www.cnblogs.com/foxting/p/SWIFT.html
  8. 极客大学产品经理训练营:数据分析 第八章作业
  9. 大数据调度工具oozie详细介绍
  10. 在宿舍的同学们,只要你有本本,就可以免费无线上网~~
  11. Python爬取王一博高清图片,竟然如此简单!
  12. Teams Tab App 分析
  13. hadoop性能优化(调优)
  14. Hypermesh2D网格划分实例1
  15. 支付--支付宝手机网站支付(WAP)
  16. EventBus使用之基础
  17. linux用vi写文件内容,Linux下利用vi编辑器创建文件并写入内容 专家详解
  18. PC游戏中用CEF3制作内嵌浏览器
  19. 淘宝逛逛,一个0成本适合新手的副业项目
  20. Socket心跳包编程

热门文章

  1. CSS3实现跳动的红心
  2. java 国际化方案,java 项目国际化完全实现
  3. 【人人开源】集成通过Token认证统一登录功能
  4. 理解Java并发编程:volatile关键字解析
  5. oracle用数据泵,Oracle 数据泵使用
  6. lua连接数据库之luasql ------ luasql连接mysql数据库 及 luasql源码编译
  7. Struts + hibernate +spring课堂笔记
  8. 图书盘点机软件作为图书盘点机使用
  9. java dsa 私钥_DSA算法——本质上和RSA是一样的 有公钥和私钥
  10. 蔬菜类别二级计算机,蔬菜计算机编码 蔬菜商品分类和代码.pdf