Python基础教程之4种常用的推导式,深化学习有奇招

前言

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

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

  • 列表(list)推导式
  • 嵌套列表推导式
  • 字典(dict)推导式
  • 集合(set)推导式

接下来咱们一一介绍,希望能对大家学习有所帮助。

一、列表推导式

列表推导式提供了一种创建list的简便方法。应用程序创建列表时,列表中的元素来源于其他序列、可迭代对象或创建的一个满足一定条件的序列。

基本格式:

[表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件]

例子1:写一个列表生成式,产生一个公差为11的等差数列

print([x*11 for x in range(10)])

例子2:创建一个平方数组成的列表

>>> squares = [x**2 for x in range(10)]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

等价于以下map方法:

squares = map(lambda x: x**2, range(10))

例子3: 有一个嵌套列表,a=[[1,2],[3,4],[5,6]],要提取列表里的每一个元素

>>> b=[j for i in a for j in i]
>>> b
[1, 2, 3, 4, 5, 6]

例子4:使用列表推导式生成100以内的所有素数

[p for p in range(2,100) if 0 not in [p%d for d in range(2,p)]]

 

二、嵌套列表推导式

列表表达式中的初始表达式可以是任意表达式,包括另一个列表表达式。(一个表达式里面嵌套另一个或多个表达式)

例子1:矩阵的转置

>>> matrix = [
...     [1, 2, 3, 4],
...     [5, 6, 7, 8],
...     [9, 10, 11, 12],
... ]
>>> transposed = []
>>> for i in range(4):
...     transposed.append([row[i] for row in matrix])
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

列表推导式:

>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] 

等价于以下Zip(内置函数)方法:

>>> zip(*matrix)
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

三、字典推导式

字典推导和列表推导的使用方法是类似的,只不中括号该改成大括号。直接举例说明:

例子一:大小写key合并

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}

例子二:快速更换key和value

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

四、集合推导式

它们跟列表推导式也是类似的。 唯一的区别在于它使用大括号{}。

例一:

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

以上就是小编帮大家整理的Python各种推导式,大致上是这四类,希望能帮到大家。

另外,小编还帮大家整理了一些Python视频及PDF文档学习资料,有需要的小伙伴请关注小编后私信回复【Python】即可免费领取哦~

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值