1 推导式简介


推导式comprehensions(又称解析式),是Python的一种独有特性。

推导式是可以从一个数据序列构建另一个新的数据序列的结构体。

推导式有三种形式:

1)列表推导式 (list)

2)字典推导式 (dict)

3)集合推导式 (set)

2 列表推导式


是用可迭代对象生成列表的一种方法

列表推导式是表达式

2.1 基本的列表推导式

语法

[表达式 for 变量 in 可迭代对象]

[表达式 for 变量 in 可迭代对象 if 真值表达式]

示例1:[1,2,3,4,5,6.......,10]

[x for x in range(1, 11)]

   L = []
   for x in range(1, 10001):
       L.append(x)

示例2:[1, 4, 9, 16, 25, ...]

[x**2 for x in range(1, 11)]

示例3:[1 3 5 7 .... 99]

[x for x in range(1, 100) if x % 2 == 1]

示例4:生成1000以内的所有素数的列表

def is_prime(x):
    """
    判断x是否为素数(或质数)
    如果为素数,返回True
    """
    if x <= 1:
        return False
    for i in range(2, x):
        if x % i == 0:
            return False
    return True

L = [x for x in range(1, 10000) if is_prime(x)]
print(L)

示例5:

s1 = "ABC"
s2 = "123"
如何生成以下列表
L = ['A1', 'A2', 'A3', 'B1', 'B2'...]

L = []
for x in s1:
   for y in s2:
       L.append(x + y)

如何生成以下列表
L = ['A1', 'B2', 'C3']

s1 = 'ABC'
s2 = '

a = []
for i in range(len(s1)):
    a.append(s1[i]+s2[i])
print(a)

2.2 嵌套的列表推导式

语法:

[表达式
   for 变量1 in 可迭代对象1 if 条件表达式1
   for 变量2 in 可迭代对象2 if 条件表达式2
]

示例1:

s1 = "ABC"
s2 = "123"
如何生成以下列表
L = ['A1', 'A2', 'A3', 'B1', 'B2'...]

s1 = "ABC"
s2 = "
L = [x + y for x in s1 for y in s2]

3 字典推导式


语法:

{ 键表达式 : 值表达式 for 变量 in 可迭代对象 if 真值表达式 [for 变量 in 可迭代....]}

字典中的用法与列表中的用法类似,将 [ ] 换成  { } 即可

示例1:

生成表达式:{1:"1的平方", 4:"2的平方", 9:'3的平方', ..100:'10的平方'}

d = {x**2 : str(x)+'的平方' for x in range(1, 11)}

示例2:快速更换key和value

mcase = {'a': 1, 'b': 2}
mcase_frequency = {v: k for k, v in mcase.items()}
print(mcase_frequency)
# output {10: 'a', 34: 'b'}

示例3:将字典中大小写a b 键所对应的值合并

mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase_frequency = {
    k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0)
    for k in mcase.keys()
    if k.lower() in ['a','b']
}
print(mcase_frequency)
#  Output: {'a': 17, 'b': 34}

备注: D.get(key, default)   返回键 key 所对应的值,如果没有此键,则返回 default(默认 None)

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

4 集合推导式


语法:

集合推导式语法:
  { 表达式  for 变量 in 可迭代对象 if 真值表达式  [for 变量 in 可迭代....]}

集合中的用法与列表中的用法类似,将 [ ] 换成  { } 即可

示例1:

squared = {x**2 for x in [1, 1, 2]}
print(squared)
# Output: {1, 4}

注意:集合中具有特有的性质,其元素不能重复

示例2:

生成集合:{1, 8, 27, 4**4... n**n}

s = {x ** x for x in range(1, 10)}

另外还有更为广泛的应用:python的推导式(实用)  python-列表推倒式-轻量级循环

python学习笔记013——推导式的更多相关文章

  1. python学习笔记013——模块

    1 模块module 1.1 模块是什么 模块是包含一系列的变量,函数,类等程序组 模块通常是一个文件,以.py结尾 1.2 模块的作用 1. 让一些相关的函数,变量,类等有逻辑的组织在一起,使逻辑更 ...

  2. python学习笔记013——模块中的私有属性

    1 私有属性的使用方式 在python中,没有类似private之类的关键字来声明私有方法或属性.若要声明其私有属性,语法规则为: 属性前加双下划线,属性后不加(双)下划线,如将属性name私有化,则 ...

  3. python学习笔记013——内置函数dir()

    1 描述 dir() 函数 不带参数时,返回当前范围内的变量.方法和定义的类型列表: 带参数时,返回参数的属性.方法列表. 如果参数包含方法__dir__(),该方法将被调用. 如果参数不包含__di ...

  4. python学习笔记013——包package

    1 包(模块包)package 1.1 包的定义 包是将模块以文件夹的组织形式进行分组管理的方法 1.2 作用 分类管理,有利于防止命名冲突 可以在需要时加载一个或部分模块,而不是全部模块 mypac ...

  5. python基础学习1-列表推导式和字典推导式

    #!/usr/bin/env python # -*- coding:utf-8 -*- #列表推导式 取得100内可以被2整除且不能被3整除的数字 a=[i for i in range(100) ...

  6. Python 学习笔记(下)

    Python 学习笔记(下) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(下) 函数设计与使用 形参与实参 ...

  7. Python 学习笔记(上)

    Python 学习笔记(上) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(上) 基础知识 基本输入输出 模 ...

  8. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  9. 【Python学习笔记之二】浅谈Python的yield用法

    在上篇[Python学习笔记之一]Python关键字及其总结中我提到了yield,本篇文章我将会重点说明yield的用法 在介绍yield前有必要先说明下Python中的迭代器(iterator)和生 ...

随机推荐

  1. go语言之进阶篇非结构体匿名字段

    1.非结构体匿名字段 示例 : package main import "fmt" type mystr string //自定义类型,给一个类型改名 type Person st ...

  2. go语言之进阶篇同名字段

    1.同名字段 示例: package main import "fmt" type Person struct { name string //名字 sex byte //性别, ...

  3. Spring boot分层和基本概念

    后端层次划分: 后端分包: 不同层级之间数据传输:推荐第二种 POJO与JavaBean: POJO就是简单的私有属性,加get/set方法, JavaBean,就是会做一些逻辑处理,包括接收事件,和 ...

  4. IOS系统之蓝牙外接设备

    Ios系统对于蓝牙外接设备在iphone4以前都是蓝牙2.0的时候,需要通过苹果的审核,据统计通过率仅有2%左右,现在蓝牙2.0基本上处于淘汰状态,所以在这里就不考虑了. 现在iphone4s以后的设 ...

  5. [Webpack] Externalize Dependencies to be Loaded via CDN with webpack

    We can separate our custom application code from the common libraries we leverage, such as React and ...

  6. 6. Activity life cycle

    An activity can exist in essentially three states: Resumed The activity is in the foreground of the ...

  7. Cocos2d-x 粒子编辑器 Particle Studio 争做 Windows Particle Designer 源代码

    1.Particle Studio介绍 非常早发现一款粒子编辑器叫Particle Designer,不知道为什么它没有Windows版本号. 所以我就在Windows下基于Qt做了一个粒子编辑器.之 ...

  8. eclipse在search的时候,通过search打开的页面会覆盖之前打开的页面

    eclipse在search的时候,通过search打开的页面会覆盖之前打开的页面,如果不想覆盖的话,可以这么设置: Window->Preferences->General->Se ...

  9. UDP和TCP的比較

    当client须要请求数据库server上的某些数据时,它至少须要三个数据报来建立TCP连接.三个数据报礼发送和确认少量数据,三个用来关闭连接. 然而,假设使用UDP的话,只须要发出两个数据报就能达到 ...

  10. Web 应用性能提升的 10 个建议

    建议一.利用反向代理服务器加速和保护应用 如果 Web 应用运行在一台独立的电脑上,性能问题的解决方案是显而易见的:换一台更快的电脑,里面加上更多的处理器.内存.快速磁盘阵列等等.然后在这台新电脑上运 ...