列表解析

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}

 

posted @ 2016-12-02 12:51  weller  阅读(340)  评论(0编辑  收藏  举报