Chinaunix首页 | 论坛 | 博客
  • 博客访问: 108692
  • 博文数量: 67
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 577
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-16 09:51
个人简介

啄木鸟专吃虫,故名啄木鸟。

分类: Python/Ruby

2014-08-29 19:55:11

列表推导式:
[expr for iter_var in iterable]
1首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。
比如我们要生成一个包含1到10的列表
[x for x in range(1,11)]
Range(1,11)
[expr for iter_var in iterable if cond_expr]

2加入了判断语句,只有满足条件的内容才把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。
要生成包含1到10的所有奇数列表。
range(1,11,2)
[x for x in range(1,11) if x % 2 == 1]

 列表推导式的写法 ,我一般习惯从右至左写,这样比较符合人的思维方式。
>>> x*x for x in range(10)-----------语法错误,因为列表推导式必须要加【】
SyntaxError: invalid syntax

>>> [x*x for x in range(10)]---------数字
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> ["the %s"% s for s in range(10)]-----------字符
['the 0', 'the 1', 'the 2', 'the 3', 'the 4', 'the 5', 'the 6', 'the 7', 'the 8', 'the 9']
>>> [(x,y) for x in range(2) for y in range(3)]-------------元组
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]

>>> [(x,y) for x in range(2) for y in range(3,5)]
[(0, 3), (0, 4), (1, 3), (1, 4)]
>>> dict([(x,y) for x in range(2) for y in range(3,5)])------字典,为什么只有两组,因为同key的值被覆盖了
{0: 4, 1: 4}


阅读(556) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~