各种推导式,主要使用示例演示用法

列表生成式

示例1:求0-9每个数的平方

li = [x*x for x in range(10)]
print(li) # 执行结果:
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

列表生成式,使用[],括号内是for循环语句

示例2:求0-9能被3整除的数字

li = [x for x in range(10) if x % 3 == 0]
print(li) # 执行结果:
# [0, 3, 6, 9]

在这个列表生成式中,不断有for循环,而且还用到了if判断语句

列表生成式的格式:
    (1)[元素 for 元素 in 可迭代的类型 ]
    (2)[元素 for 元素 in 可迭代的类型 if 元素需要满足的条件]

生成器表达式

还是上面两个例子,使用生成器表达式写出来:

示例1:求0-9每个数的平方

g = (x for x in range(10) if x % 3 == 0)

print(g)    # generator 这里的g就是一个生成器了,将中括号换成小括号就变成了生成器表达式

for i in g:
print(i) # 执行结果:
# <generator object <genexpr> at 0x00000194C9FA34C0>
# 0
# 3
# 6
# 9

示例2:求0-9能被3整除的数字

g = (x for x in range(10) if x % 3 == 0)

print(next(g))
print(next(g))
print(next(g))
print(next(g)) # 执行结果:
# 0
# 3
# 6
# 9

列表生成式和生成器表达式总结:
    1. 把列表生成式的中括号换成小括号就是生成器表达式
    2. 列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存

示例3:找到嵌套列表中名字含有两个'e'的所有名字

names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] # for name in names:
# for i in name:
# if i.count('e') == 2:
# print(i) # 如果无法一次写出嵌套的列表生成式,可以先使用for循环写出来
list_name = [x for name in names for x in name if x.count('e') == 2]
print(list_name) # 执行结果:
# ['Jefferson', 'Wesley', 'Steven', 'Jennifer']

字典推导式

示例1:将字典中的key和value对调

# 注意字典推导式中,返回的一定是一个字典类型:mcase[i]:i
dic = {mcase[i]:i for i in mcase}
print(dic) # 执行结果:
# {10: 'a', 34: 'b'}

示例2:合并大小写对应的value值,将k统一成小写

mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}

dic = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase}
print(dic) # 执行结果:
# {'a': 17, 'b': 34, 'z': 3} # 这个示例中用到了 get() 这个知识点:
# mcase.get(k.lower(), 0) 当字典mcase中存在k.lower()的时候则直接返回,否则返回默认填写的0

集合推导式

集合数据类型,有自带的去重功能

squared = {x**2 for x in [1, -1, 2]} # 返回 1, 1, 2 集合自带去重的功能

print(squared)

# 执行结果:
# {1, 4}

其他一些示例:

# 例1:  过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母

li = ['a', 'abc', 'c', 'dddd']

l1 = [i.upper() for i in li if len(i) >= 3]
print(l1)

# 例2:  求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表

l1 = [(x, y) for x in range(1, 5) if x%2==0 for y in range(1, 5) if y%3==0]
print(l1)

# 例3:  求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]

M = [[1,2,3],[4,5,6],[7,8,9]]
l1 = [i[2] for i in M]
print(l1)

[ python ] 各种推导式的更多相关文章

  1. Python列表推导式和嵌套的列表推导式

    列表推导式提供了一个更简单的创建列表的方法.常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列. 例如,假设我们想创建一个平方 ...

  2. python的推导式 —— 列表推导式、集合和字典推导式

    python的推导式是用于快速处理数据的方法. 主要有:列表推导式.集合推导式和字典推导式 import time import numpy as np 列表推导式: 1. 速度快 t1 = time ...

  3. python字典推导式 - python基础入门(17)

    在昨天的文章中,我们介绍了关于python列表推导式 的使用,字典推导式使用方法其实也类似,也是通过循环和条件判断表达式配合使用,不同的是字典推导式返回值是一个字典,所以整个表达式需要写在{}内部. ...

  4. python 列表推导式 - python基础入门(16)

    截止到目前为止,python基础内容已经学习了50%左右,在学习编程过程中,我们不仅要学习python语法,同时也需要学习如何把自己代码写的更美观,效率更高. 一.什么是推导式 推导式是从一个或者多个 ...

  5. python列表推导式详解

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

  6. Python之推导式、生成器表达式

    l = [i for i in range(10)] print(l) l1 = ['选项%s'%i for i in range(10)] print(l1) 1.把列表解析的[]换成()得到的就是 ...

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

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

  8. Python生成器/推导式/生成器表达式

    一   生成器 生成器的本质就是迭代器 生成器的特点和迭代器一样,取值方式和迭代器一样(__next__(),  send():  给上一个yield传值) 生成器一般由生成器函数或者生成器表达式来创 ...

  9. python各种推导式分析

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

  10. Python——生成器&推导式

    生成器 生成器的本质就是迭代器,那么还为什么有生成器呢,两者唯一的不同就是迭代器都是Python给你提供能够的已经写好的工具或者通过数据转化得来的.而生成器是需要我们自己用Python代码构建的工具. ...

随机推荐

  1. 【BZOJ1494】【NOI2007】生成树计数(动态规划,矩阵快速幂)

    [BZOJ1494][NOI2007]生成树计数(动态规划,矩阵快速幂) 题面 Description 最近,小栋在无向连通图的生成树个数计算方面有了惊人的进展,他发现: ·n个结点的环的生成树个数为 ...

  2. 【loj6059】Sum

    Portal --> loj6059 Solution ​​ 看过去第一反应是..大力数位dp!然后看了一眼数据范围... ​ 但是这没有什么关系!注意到我们不需要考虑前导零了,可以直接快乐dp ...

  3. Linux基础-----------nginx安装和nginx web、nginx反向代理、nfs 服务

    作业一:nginx服务1)二进制安装nginx包 yum install epel-release -y 先安装epel-release 再查看yum源中已经安装上了epel相关文件 中间省去了一些安 ...

  4. 《剑指offer》— JavaScript(8)跳台阶

    跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 实现代码 function jumpFloor(number) { if (number& ...

  5. MDK5.13新建工程步骤

    http://www.stmcu.org/module/forum/thread-600249-1-1.html 本人也是接触stm32没多久,之前用的MDK是5.1,现在用的是5.13,MDK5.0 ...

  6. 用dom4j修改xml(增加修改节点)

    用dom4j修改xml(增加修改节点) 博客分类: Java XMLJavaMyeclipseServlet  使用dom4j修改解析xml,xml文件的位置是配置在xml.properties文件中 ...

  7. python编码问题FAQ

    http://note.youdao.com/noteshare?id=2cfb0ac4da042c2550aa3918beda81ec

  8. EL表达式格式化日期

    在EL表达式中要显示"yyyy-MM-dd"格式的日期: 使用<fmt:>格式化标签     1 在页面上导入   <%@ taglib prefix=" ...

  9. C11线程管理:互斥锁

    1.概述 锁类型 c11提供了跨平台的线程同步手段,用来保护多线程同时访问的共享数据. std::mutex,最基本的 Mutex 类,独占的互斥量,不能递归使用. std::time_mutex,带 ...

  10. 【BZOJ】2565: 最长双回文串

    [题意]给定小写字母字符串s,求最长的 [ 可以分成左右两个回文串的 ] 子串,n<=10^5. [算法]回文树 [题解]对于每个字符x,处理出以x结尾的最长回文串,以x开头的最长回文串,然后枚 ...