1.前言

推导式,英文名字叫comprehensions,注意与comprehension(理解)只有s字母之差。推导式又可以叫解析式,推导式可以从一种数据序列构建新的数据序列的结构体。推导式分为,列表推导式,字典推导式,嵌套列表推导式,本节介绍列表推导式,其他后续介绍.

2.列表推导式概念

它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是0个或多个for或者if语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,是另一个新列表,原列表保持不变。在这个以iffor语句为上下文的表达式运行完成之后产生。

写法模式:[expr for value in collection if condition]

if过滤条件,取决于实际应用是否需要,可有可无

3.实例:

示例1:

#输出30以内被4整除的数,各自加0.5
list1=[i+0.5for i in range(30)if i%4==0]
print(list1)
# [0.5, 4.5, 8.5, 12.5, 16.5, 20.5, 24.5, 28.5] 对比for循环代码为:
list2=[]
for i in range(30):
if i%4==0:
list2.append(i+0.5)
print(list2)
# [0.5, 4.5, 8.5, 12.5, 16.5, 20.5, 24.5, 28.5]

示例2:

# 将列表中长度大于4的字母大写,长度小于或等于4的字母小写
name1= ['Bob','tom','alice','Jerry','Wendy','Smith','liuhu']
name2=[name.upper() for name in name1 if len(name)>4]
print(name2)
name3=[name.lower() for name in name1 if len(name)<=4]
print(name3)
name4=name2.extend(name3)
print(name4)
print(name2)
# ['ALICE', 'JERRY', 'WENDY', 'SMITH', 'LIUHU']
# ['bob', 'tom']
# None
# ['ALICE', 'JERRY', 'WENDY', 'SMITH', 'LIUHU', 'bob', 'tom']
注意:name4为空,写法需要更正 还有更简单的方法,在列表推导式中使用if else语句:
name5= ['Bob','tom','alice','Jerry','Wendy','Smith','liuhu']
name6=[name.upper()if len(name)>4 else name.lower() for name in name5]
print(name6)
# ['bob', 'tom', 'ALICE', 'JERRY', 'WENDY', 'SMITH', 'LIUHU']
示例3:
# 与zip结合
a = [ -6, -7, -8, -9, -10]
b = [1, 2, 3, 4, 5]
xy = [[x, y] for x, y in zip(a, b)]
print(xy)
# [[-6, 1], [-7, 2], [-8, 3], [-9, 4], [-10, 5]] 示例4:
# 支持多层for循环,将一个嵌套列表转换成一个一维列表。
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b = [j for i in a for j in i]
print(b)
# [1, 2, 3, 4, 5, 6, 7, 8, 9] 示例5:
m,n中矩阵元素的乘积玩法;
m = [[1,2,3],[4,5,6],[7,8,9]]
n = [[2,2,2],[3,3,3],[4,4,4]]
# 矩阵行与行相乘
hc=[m[row][col]*n[row][col] for row in range(3) for col in range(3)]
print(hc)
# [2, 4, 6, 12, 15, 18, 28, 32, 36] # 矩阵相乘
jc=[[m[row][col]*n[row][col] for col in range(3)] for row in range(3)]
print(jc)
# [[2, 4, 6], [12, 15, 18], [28, 32, 36]] # 矩阵列与列乘
lc=[[m[row][col]*n[row][col] for row in range(3)] for col in range(3)]
print(lc)
# [[2, 12, 28], [4, 15, 32], [6, 18, 36]]
 

python3进阶之推导式之列表(list)推导式(comprehensions)的更多相关文章

  1. python的各种推导式(列表推导式、字典推导式、集合推导式)

    推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(lis ...

  2. 周末学习笔记——day02(带参装饰器,wraps修改文档注释,三元表达式,列表字典推导式,迭代器,生成器,枚举对象,递归)

    一,复习 ''' 1.函数的参数:实参与形参 形参:定义函数()中出现的参数 实参:调用函数()中出现的参数 形参拿到实参的值,如果整体赋值(自己改变存放值的地址),实参不会改变,(可变类型)如果修改 ...

  3. python列表推导式详解 列表推导式详解 字典推导式 详解 集合推导式详解 嵌套列表推导式详解

    推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...

  4. Python中的推导式(列表推导式、字典推导式、集合推导式)

    推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(lis ...

  5. 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)

    # 『Python基础-12』各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的 ...

  6. python之三元表达式,列表|字典推导式,函数对象

    #### 三元表达式: 就是if....else...的语法糖 # -- 1) 只能解决if...else...结构,其他if分支结构都不管 # -- 2)一个分支提供一个结果: 如果一个分支提供了多 ...

  7. Scala进阶之路-Scala高级语法之隐式(implicit)详解

    Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一 ...

  8. SQL Server 学习博客分享列表(应用式学习 + 深入理解)

    SQL Server 学习博客分享列表(应用式学习 + 深入理解) 转自:https://blog.csdn.net/tianjing0805/article/details/75047574 SQL ...

  9. Python3学习笔记14-迭代与列表生成式

    迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration) 在Python中,迭代是通过for...in来完成的. d = ...

  10. RTX——第10章 任务调度-抢占式、时间片和合作式

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章教程为大家将介绍 RTX 操作系统支持的任务调度方式,抢占式,时间片和合作式,这部分算是RTX 操作 ...

随机推荐

  1. java基础(5)----面向对象

    编程思想: 简单的说一下,我们学习编程,最重要的就是要有编程思想,而编程思想无非就是面向过程和面向对象,以下谈谈我对编程思想的理解. 面向过程: 从过程入手,第一步,第二步--.借助过程与过程的配合, ...

  2. DevOps实践之Jenkins安装部署

    Prerequisites Minimum hardware requirements: 256 MB of RAM 1 GB of drive space (although 10 GB is a ...

  3. Java基础学习笔记二十三 Java核心语法之反射

    类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任 ...

  4. C#添加背景音乐

    <MediaElement Name="audio"/> <Button Name="music" Content="点我有音乐哦& ...

  5. C语言--总结报告

    1.当初你是如何做出选择计算机专业的决定的? 经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 当初填报志愿我是有很明确的专业方向的,就是IT类的 ...

  6. 201621123057 《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 在上一周的总结上做了一点补充 1.2 选做:收集你认为有用的代码片段 2. 书面作业 本次作业题集集合 1. ...

  7. 201621123031 《Java程序设计》第13周学习总结

    作业13-网络 1.本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被 ...

  8. 关于java中的数组

    前言:最近刚刚看完了<Java编程思想>中关于数组的一章,所有关于Java数组的知识,应该算是了解的差不多了.在此再梳理一遍,以便以后遇到模糊的知识,方便查阅. Java中持有对象的方式, ...

  9. vue jquery js 获取当前时间本周的第一天 和 本月的第一天

    交互的时候传输数据 后台要求这样的数据 直接上代码 这是我找度姨要的  附上链接  https://www.cnblogs.com/wasabii/p/7756560.html 它里面有本季度第一天  ...

  10. Solaris 11 system package 安装与更新(如:assembler)

    最近在VirtualBox虚拟机中导入了Solaris 11.3.在里面安装Oracle数据库时,先行条件检查没通过,提示缺少程序包assembler. 在网上看了许多,这方面的信息还比较少.最后在O ...