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

列表生成式

示例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. bzoj2969 矩形粉刷 概率期望

    此题在bzoj是权限题,,,所以放另一个oj的链接 题解: 因为期望线性可加,所以可以对每个方格单独考虑贡献.每个方格的贡献就为至少被粉刷过一次的概率×1(每个格子的最大贡献就是1...)每个方格至少 ...

  2. 常州day2

    Task1 为了测试小 W 的数学水平,果果给了小 W N 个点,问他这 N 个点能构成的三角形个数. 对于 100%的数据:N<=100,保证任意两点不重合,坐标<=10000 恶心题( ...

  3. php配置说明

    1上传文件限制配置 post_max_size = 200M upload_max_file_size = 200M

  4. mysql三-1:存储引擎

    一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型 ...

  5. linux小命令集合

    du -sh *  查看当前目录下的当前子目录的内存大小 df -h  查看内存占用情况 tar -xvf src.tgz ;    rsync -avzL   src/  desc/     lin ...

  6. 图像格式转换之BMP格式转换为JPG格式

    // bmp2jpg.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "jpeglib.h" #inc ...

  7. Android Studio获取调试版SHA1和发布版SHA1的方法

    前言: 当我们在集成高德地图定位功能到项目中的时候,需要用到发布版和调试版的安全码SHA1,所以今天我就来总结一下分别在Windows和Mac下是怎么来获取SHA1的,希望对大家有所帮助. 首先,统一 ...

  8. codeforces 876 D. Sorting the Coins

    http://codeforces.com/contest/876/problem/D D. Sorting the Coins time limit per test 1 second memory ...

  9. HDU 4978 计算 凸包

    有以无限间隔$D$的水平线分割的平面,在上面随机投下一个圆,圆中有一些点,点之间两两成一条线段,问随机投下至少有一条线段于平行线相交的概率. 以下是不严(luan)谨(lai)的思路. 首先都知道对于 ...

  10. Python学习笔记(三十一)正则表达式

    ---恢复内容开始--- 摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 ...