深入了解和熟练使用python的列表表达式和内置的一些高阶函数如lamda, zip, enumerate, map, filter, reduce, sorted方法是python学习,面试和工作的必备技能。正是它们给了python优秀的特性,从而使python有别于其它编程语言。网上的介绍和教程有很多,但感觉还是比较零散,解读也不够深入,小编决定再次动手写篇总结。如果大家还没读过小编写的一文看懂python系列文章,请先阅读
一文看懂Python面向对象编程(Python学习与新手入门必看)-绝对原创
和
一文看懂Python对文件和文件夹的操作: 含os, shutil和glob模块。Python学习面试必读。
本文内含很多实例代码,以帮助新手更好理解。
列表表达式[List Comprehension]
顾名思义,这个表达式作用是以一个快捷的方法对列表进行操作或运算,返回新的
列表
。其使用方式为[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]。
一个最简单的列表表达式的例子如下。
>>> list1 = [1, 2, 3, 4] >>> list2 = [ i*i for i in list1] >>> list3 = [ i*i for i in list1 if i>2] >>> print(list2) [1, 4, 9, 16] >>> print(list3) [9, 16]
列表表达式也可以遍历元组生成新的列表(如list5),然而却不能直接生成新的元组。比如list6实际上是个生成器表达式,不属于列表表达式了。对于生成器表达式可以通过使用list6.__next__()方法一次一次取值。
>>> tuple1 = (1, 2, 3, 4) >>> list5 = [ i*i for i in tuple1 ] >>> print(list5) [1, 4, 9, 16] >>> list6 = ( i*i for i in tuple1 ) >>> print(list6) <generator object <genexpr> at 0x03559E10>
下面我们来看下3个常考的关于列表表达式应用的例子。
1.统计字符串列表中每个字符串的长度
>>> words = ['abc','defg','I love python', 'Django'] >>> len_list = [ len(word) for word in words ] >>> print(len_list) [3, 4, 13, 6]
2. 利于列表表达式求两个列表的交集。
>>> a = [ 3, 5, 6, 8] >