Python-列表解析和生成表达式

目的是巩固网易云课堂python学习视频中的知识

先看一道比较简单的题目:列出小于10,并且能被3或者5整除的数字,并求和。如果是10000,10000000呢?

  • 一般的代码
nums = []
for i in range(1, 10):
    if i%3 == 0 or i%5 == 0:
        nums.append(i)
print(sum(nums))
  • 使用列表解析
nums = [i for i in range(1, 10) if i%3==0 or i%5==0]
print(sum(nums))
  • 列表解析的一般形式
[expr for iter_var in iterable] #expr:表达式
[expr for iter_var in inerable if cond_expr] #if后面的语句为判断语句

例如求一个列表为[0, 10, 20,…, 80, 90]可以这样写

nums = [i*10 for i in range(0, 10)]

注意我上面写的虽然是正确的,但是在python里面是不科学的,因为列表解析通常用在需要改变列表从而返回改变后的列表值,而不应该用在新建一个列表上。

  • 生成器表达式
(expr for iter_var in iterable) #expr:表达式
(expr for iter_var in inerable if cond_expr) #if后面的语句为判断语句

可以看成生成表达式与列表解析不同的是‘[]’变为‘()’,但是列表解析返回的是一个列表,而生成表达式返回的是一个生成器对象(generator object)。生成器使用了“惰性计算”,只有在检索时才被赋值,所以在列表比较长的情况下使用,内存上更有效。
这里写图片描述

这里写图片描述

  • 用生成表达式写那个题:
s = 0
nums = (i for i in range(1, 10000000) if i%3==0 or i%5==0)
for i in nums:
    s += i
print(s)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值