一、列表推导式结构
列表推导式的结构是一个特殊的列表结构,以空格为间隔,包含表达式和若干个条件语句,其中,条件语句至少有一个for语句
[expression for... [for,if] [for,if]...]
二、列表推导式的运行
列表推导式运行时,首先执行第一个条件语句,之后依次向右执行剩余的条件语句,最后再执行表达式。条件语句之间的关系时自左向右嵌套
运行结束后返回符合条件的所有表达式值的列表
列表推导式比传统的嵌套循环速度快,在需要快速生成特定列表时可以节省消耗
#上述推导式等价于以下嵌套条件语句
list = []
for...:
[for,if]:
[for,if]:
...
list.append(expression)
return list
三、用法示例
#简单推导式
[x for i in range(3)]
>>[0,1,2]
#多变量推导式
[x+y for x in range(5) for y in range(3)]
>>[0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 6]
#复杂推导式
[x*y for x in range(5) for y in range(3) if y!=x]
>>[0, 0, 0, 2, 0, 2, 0, 3, 6, 0, 4, 8]
I、求a~d能组成的所有两字符的字符串
result = [chr(x)+chr(y) for x in range(97,101) for y in range(97,101)]
print(a)
>>['aa', 'ab', 'ac', 'ad', 'ba', 'bb', 'bc', 'bd', 'ca', 'cb', 'cc', 'cd', 'da', 'db', 'dc', 'dd']
Ⅱ、矩阵转置
a = [
[1,2,3],
[4,5,6]
]
#按列遍历内部再按行遍历,i为列号
at = [[row[i] for row in a] for i in range(3)]
print(at)
>>[[1, 4], [2, 5], [3, 6]]
四、生成器表达式
将列表推导式的方括号改写成圆括号,得到的就不是一个列表,而是一个生成器。列表是一次性生成的,而生成器是边计算边得到下一个值的,因此可以节约开销
(expression for...)
print(type((x for x in range(10))))
>><class 'generator'>
完
欢迎在评论区留言
感谢浏览