Python各种推导式(列表推导式,字典推导式,集合推导式,嵌套列表推导式)

一、列表推导式

Python官网列表推导式部分

列表推导式提供了一种创建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方法:参考(菜鸟教程之Python 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)]]

二、字典推导式

字典推导式和列表推导式的使用方法是类似的,只不过中括号改成了大括号。

基本格式

{ key_expr: value_expr for value in collection if condition }

例子1:

>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

三、集合推导式

集合推导式和列表推导式的使用方法也是类似的,只不过中括号改成了大括号。

基本格式:

{ expr for value in collection if condition }

例子1:

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
set(['r', 'd'])

四、嵌套列表推导式

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

例子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)]


猜你喜欢

转载自blog.csdn.net/weixin_39506322/article/details/88384125