Python中的推导式

推导式 Compression

推导式 ( Compression )是Python语言的一大特色

相比于其他语言而言, 推导式使得Python能够编辑的进行循环,创建出特定的字典,列表等可迭代对象

使用推导式可以避免代码的冗长,简化代码风格,使得代码更加的Pythonic

本文就将详细介绍Python中的推导式

推导式可以分为下面几种:

  • 列表推导式,字典推导式,集合推导式

其实还有生成器推导式,不过不是很常用,因此不加以介绍

列表推导式

列表推导式指的是可以用于生成列表的推导式

简单的列表推导式

简单的列表推导式的语法如下,这样我们就能够快捷的创建列表

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

示例如下

List1=[x for x in 'abcd']
List2=[y**2 for y in range(6)]
List3=[i+1 for i in [-1,-2,-3,-4]]
List1
List2
List3
>>>
['a', 'b', 'c', 'd']
[0, 1, 4, 9, 16, 25]
[0, -1, -2, -3]

运行结果如下(In [1]中的内容可以不管)

在这里插入图片描述

带条件的列表推导式

上面我们创建了简单的推导式,实际上还可以创建带条件的推导式,这样我们能够创建更复杂的表达式

带条件的列表推导式如下

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

例子如下

List4=[x for x in range(6) if x%2==0]
List5=[i**2 for i in range(10) if i**2 in range(10)]
List4
List5
>>>
[0, 2, 4]
[0, 1, 4, 9]

在这里插入图片描述

嵌套列表推导式

我们前面的列表推导式实际上都只有一个变量,但是我们其实可以使用多变量的列表推导式

具体时候类似于两个for循环嵌套,因此又可以称为嵌套列表式

以双变量和三变量为例的列表推导式如下, 按照这样的规则实际上可以扩展到n个变量的嵌套列表推导式

双变量列表推导式

[ 表达式(可含变量1和变量2) for 变量1 in 可迭代对象1 for 变量2 in 可迭代对象2 ]

三变量列表推导式

[ 表达式(可含变量1和变量及变量3) for 变量1 in 可迭代对象1 for 变量2 in 可迭代对象2 for 变量3 in 可迭代兑现3]

例子如下

List6=[(x,y) for x in range(-2,2) for y in [0,1]]
List7=[x+y+z for x in range(-2,2) for y in range(3) for z in [0,1]]
List6
List7
>>>
[(-2, 0), (-2, 1), (-1, 0), (-1, 1), (0, 0), (0, 1), (1, 0), (1, 1)]
[-2, -1, -1, 0, 0, 1, -1, 0, 0, 1, 1, 2, 0, 1, 1, 2, 2, 3, 1, 2, 2, 3, 3, 4]

运行结果如下

在这里插入图片描述

复杂列表推导式

实际上我们能够结合带条件的列表推导式和嵌套列表推导式,由此可以有一些非常Pythonic的操作

List8=[(x,y) for x in range(-20,20,1) for y in range(-20,20,1) if y==x**2 ]
List8
>>>
[(-4, 16), (-3, 9), (-2, 4), (-1, 1), (0, 0), (1, 1), (2, 4), (3, 9), (4, 16)]

上面的代码就是求y=x**2的曲线上的点的代码

其实后续结合Numpy,Pandas,Matplotlib等诸多第三方库还可以进行绘图,

此外还能通元组赋值, zip和enumerate等函数产生妙用

具体就不一一细讲了,总之列表作Python中最常用的结构型数据类型, 列表推导式的妙用非常多

字典推导式

类似于列表推导式,字典推导式也可以结合条件语句以及多变量嵌套

简单的字典推导式

简单的字典推导式只使用一个变量,因此键和键值的表达式中都需要有变量

声明语句如下

{ 键表达式 : 值表达式 for 表达式 in 可迭代对象 }

举例如下

Dict1={i : i**2 for i in range(6)}
Dict1
>>>
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

在这里插入图片描述

嵌套的字典推导式

实际上一般在创建字典的时候,我们使用的键和键值是不一样的,因此我们更常见的做法是使用嵌套的字典推导式,即使用多个变量来进行循环,这样来创建不同的键值对

{ 键表达式 : 值表达式 for 变量1 in 可迭代对象1 for 变量2 in 可迭代对象2 }

示例如下:

Dict1={letter : i for i in range(6) for letter in "abcdef"}
Dict1
>>>
{'a': 5, 'b': 5, 'c': 5, 'd': 5, 'e': 5, 'f': 5}

在这里插入图片描述

带条件的字典推导式

其实和嵌套的字典推导式一样,略

复杂字典推导式

复杂字典推导式能够实现各种骚气的功能

具体就不细说了,我下面给一个例子,更多的使用还需要大家自己开发

Sentece='This is a sentence waiting to be count that how many times does letters occur in this sentence'
Dict2={letter : Sentece.lower().count(letter) for letter in list('abcdefghijklmnopqrstuvwxyz') }
Dict2
>>>
{'a': 4,
 'b': 1,
 'c': 5,
 'd': 1,
 'e': 11,
 'f': 0,
 'g': 1,
 'h': 4,
 'i': 7,
 'j': 0,
 'k': 0,
 'l': 1,
 'm': 2,
 'n': 8,
 'o': 5,
 'p': 0,
 'q': 0,
 'r': 2,
 's': 8,
 't': 12,
 'u': 2,
 'v': 0,
 'w': 2,
 'x': 0,
 'y': 1,
 'z': 0}

这个例子的作用就是查询这一句话中26个字母出现的字数,可以看到在C/C++中需要写很多行代码才能实现的功能在Python中只需要一行就能结束

集合推导式

集合推导式和列表推导是一样的,三种用法都一样,就不赘述了

{ 表达式 for 表达式 in 可迭代变量}

例子如下:

Set1={x for x in range(6)}
Set1
>>>
{0, 1, 2, 3, 4, 5}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值