python中列表解析的语法:
[expr for iter_var in iterable]
这条语句的作用:for循环迭代 iterable 对象的所有条目,前面的 expr 应用于序列的每一个成员,最后的结果值是该表达式产生的列表。迭代变量 iter_var 并不需要是表达式的一部分。
如要创建一个有10个在[-10,10]范围内的随机整数的列表,通常会用循环来做。而使用列表解析简单的多。
//通过循环创建 data=[] for i in xrange(10): data.append(randint(-10,10)) //列表解析创建 data=[randint(-10,10) for _ in xrange(10)]
再比如 map() 的使用:
1 //map函数 2 map(lambda x: x**2,range(6)) 3 //[0,1,4,9,16,25] 4 5 //列表解析 6 [x**2 for x in range(6)]
列表解析还可以结合 if 语句:
[expr for iter_var in iterable if cond_expr]
这个语法在迭代时会选择满足条件表达式 cond_expr 的序列成员。如用列表解析代替 filter() 函数。
//filter() seq=[11,10,9,6,5] filter(lambda x: x%2, seq) //[11,9,5] //列表解析 [x for x in seq if x%2] //[11,9,5]
python很早就支持函数式编程特性,如lambda,map(),filter() 等函数,使用列表解析可以把它们简化为一个列表解析句子,列表解析的效率比使用这些函数的效率要高很多。
字典解析
字典解析类似于列表解析,如下面创建一个字典和过滤字典的值大于90的item。
//创建字典 dic = { x: randint(60,100) for x in xrange(1,21)} //选择值大于90的项 {k : v for k,v in dic.iteritems() if v>90}