1、列表推导式书写形式:
[表达式 for 变量 in 列表] 或者 [表示式 for 变量 in 列表 if 条件]
1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 4 li = [1,2,3,4,5,6,7,8,9] 5 print [x**2 for x in li] 6 7 print [x**2 for x in li if x>5] 8 9 print dict([(x,x*10) for x in li]) 10 11 12 print [ (x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8 ] 13 14 vec=[2,4,6] 15 vec2=[4,3,-9] 16 sq = [vec[i]+vec2[i] for i in range(len(vec))] 17 print sq 18 19 print [x*y for x in [1,2,3] for y in [1,2,3]] 20 21 testList = [1,2,3,4] 22 def mul2(x): 23 return x*2 24 print [mul2(i) for i in testList]
python 生成器表达式Generators exprssion
(x+1 for x in lst) #生成器表达式,返回迭代器。外部的括号可在用于参数时省略;
举例:
(x+1 for x in lst if x!=0)
多条for子句进行嵌套,嵌套次序就是for子句的顺序:
((x, y) for x in range(3) for y in range(x) )
列表解析就是鲜明的pythonic.
从python2.2起,生成器提供了一种简洁的方式帮助返回列表元素的函数来完成简单和有效的代码;
它基于yield指令,允许停止函数并立即返回结果。
此函数保存其执行上下文,如果需要,可立即继续执行;
如:
def fibonacci():
a, b = 0, 1
while True:
yield b
a, b = b, a+b
python迭代器
python专门将关键字for用作了迭代器的语法糖。在for循环中,python将自动调用工厂函数iter()获得迭代器,自动调用next()获取元素,还完成了检查StopIteration异常的工作;
for val in lst:
print val
首先python将对关键字in后的对象调用iter函数获取迭代器,然后调用迭代器的next方法获取元素,直到抛出StopIteration异常。对迭代器调用iter函数时将返回迭代器自身,所以迭代器也可以用于for语句中,不需要特殊处理;
常用的几个内建数据结构tuple、list、set、dict都支持迭代器,字符串也可以使用迭代操作。
使用迭代器的循环可以避开索引,但有时候我们还是需要索引来进行一些操作的,这时候内建函数enumerate就发挥作用了;
它能在iter函数的结果前加上索引,以元组返回:
for idx, ele in enumerate(lst):
print idx, ele
0 1 1 2 2 3 3 4 4 5