【python技巧】一行代码可以搞定的事

文章目录


python有很多高效的语法,使用一行代码可以搞定很多逻辑,本文列举了部分,本文是基于: win10+Python 3.6.5

多重循环

比如有多重嵌套循环:

ret = []
for i in range(10):
     for j in range(10):
        ret.append(i + j)

一行代码搞定:

ret = [i + j for i in range(10) for j in range(10)]

扩展:

# 产生的列表的每个元素是一个包含两个元素的元组
ret = [(i, j) for i in range(10) for j in range(10)]

# 实际就是
ret = []
for i in range(10):
    for j in range(10):
        ret.append((i, j))
ret = [(i, j) for i in range(10) for j in range(i + 1)]
# 嗯,3重嵌套也是可以改写的
ret = [(i, j, k) for i in range(2) for j in range(2) for k in range(2)]

当然上面的操作都是使用了列表推导式,产生的结果都是放入了内存, 要节约内存,更加高效的写法,是使用生成器表达式,很简单就是把上面的[]更改为()即可,但是使用的使用要注意:

ret = [(i, j) for i in range(10) for j in range(10)] # 这是推导式
# 求长度的时候我们可以直接使用
len(ret)
ret = ((i, j) for i in range(10) for j in range(10)) # 这是推导式
# 求长度就不能直接使用len了,但是可以使用下面的方式替换
len(list(ret)) # 也就是强制转换为了列表
# 你也可以使用下面的方式
sum(1 for _ in ret)
# 当然这里还有陷阱,如果你重复执行两次上面的语句,你会发现第二次结果是0
# 这里仅限于python3的朋友,python2没有这个问题

当然,上面的使用还是稍微低级了一点,其实我们不应该在代码里面出现太多的for循环,至少在python这门语言中,for循环其实是一个不小的灾难,比如ret = ((i, j) for i in range(10) for j in range(10))这个行代码,我们出现了两个for循环,其实我们还可以(也应该)使用下面的方式,更为直观明了的表达我们的代码要做什么:

from itertools import product
ret = product(range(10), repeat=2)

持续更新中。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值