学Python记笔记——列表推导式_矩阵转置_生成器表达式

一、列表推导式结构

列表推导式的结构是一个特殊的列表结构,以空格为间隔,包含表达式和若干个条件语句,其中,条件语句至少有一个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'>

欢迎在评论区留言
感谢浏览

猜你喜欢

转载自blog.csdn.net/Xxy605/article/details/109325191