推导式 与 生成器表达式

推导式:
       
        先讲列表推导式, 其它推导式皆与之类似.
列表推导式由一个包含表达式的中括号组成, 表达式后面跟随一个for子句, 之后可以有0个或多个for子句或if子句.
由于是用中括号括起来的, 所以得到的是一个列表, 它为从一个序列中创建列表提供了一个简单的方法.
        其实,表达式就是将存储在列表中的每一项的原型, 表达式后面的语句就是 这个原型所满足的约束条件.

        so, 列表推导式 = [ 表达式 + 约束语句]

例一:  将输出 0 ~ 9 的平方

list = [x**2 for x in range(10)]

for inde in range(10):
    print list[inde]



例二: 将输出两个列表中元素的笛卡尔乘积, 条件是各自列表中挑出的两个元素值不等.

a = [(x,y) for x in [1,2,3,4,5] for y in [3,4,5] if x != y]
print a,



例三:

vecs = [-1,-2,-3,-4,-5]
array = [abs(x)**2 for x in vecs]
print array


列表推导式还可以嵌套:

官方文档上有一个经典的例子:

考虑以下的 3x4 矩阵, 一个列表中包含三个长度为4的列表:

matrix = [
       [1, 2, 3, 4],
       [5, 6, 7, 8],
       [9, 10, 11, 12],
]


如果, 现在你想交换矩阵的行和列, 可以用嵌套的列表推导式:

 print [[ROW[i] for ROW in matrix] for i in range(4)] 



同理, 集合推导式和列表推导式类似, 只是表达式外面不是中括号 [ ], 而是大括号 { }, 字典推导式外面也是大括号, 不同的是字典推导式中的表达式的形式是 " key : value "罢了.

生成器表达式 :
        生成器表达式和上面讲述的推导式十分相似, 它是 为函数服务的.  相当于将所得  列表/元组/集合/字典  当作函数的参数.

一个例子:
 
sum(i*i for i in range(10))

即计算 0 ~ 9 的平方的和, 即计算 0^2 + 1^2 + ... + 9^2 = 285
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值