python列表推导式嵌套循环_python 列表推导和嵌套循环速度对比

最近看到有这么一段代码,功能为初始化一个单位矩阵,使用的嵌套循环的方式

功能上这么实现没啥问题,就是看着有点不太简洁,所以想着能不能用列表推导实现,顺便也比较一下两者的速度差距。

使用time计时,matplotlib绘制时间曲线

import time

from matplotlib import pyplot as plt

def eye_for(row, col):

m = []

for i in range(row):

m.append([])

for i in range(row):

for j in range(col):

m[i].append(1 if i == j else 0)

return m

def eye_exp(row, col):

return [

[

1 if i == j else 0

for j in range(col)

]

for i in range(row)

]

def test(row, col):

st1 = time.time()

eye_for(row, col)

ed1 = time.time()

st2 = time.time()

eye_exp(row, col)

ed2 = time.time()

return ed1 - st1, ed2 - st2

def main():

print(eye_for(3, 4)) # [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]

print(eye_exp(3, 4)) # [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]

ps1 = []

ps2 = []

for i in range(1, 13):

y1, y2 = test(i * 100, i * 100)

ps1.append(y1)

ps2.append(y2)

plt.plot(ps1, 'b', label='for')

plt.plot(ps2, 'r', label='exp')

plt.legend()

plt.show()

main()

在我的乞丐版surface上的结果

基本上可以看到for循环的方式是推导式的两倍, so... 列表推导不仅代码量少, 而且速度上也有很大的优势,关键很pythonic!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值