列表迭代和解析
列表是一个序列,可以使用in测试,使用for迭代。
例如:
1 >>> L = ["a","b","c","d"]
2 >>> 'c' in L
3 True
4
5 >>> for i in L:
6 ... print(i)
7 ...
8 a
9 b
10 c
11 d
再说列表解析,它指的是对序列中(如这里的列表)的每一项元素应用一个表达式,并将表达式计算后的结果作为新的序列元素(如这里的列表)。
通俗一点的解释,以列表序列为例,首先取列表各元素,对每次取的元素都做一番操作,并将操作后得到的结果放进一个新的列表中。
因为解析操作是一个元素一个元素追加到新列表中的,所以也称为"列表推导",表示根据元素推导列表。
最简单的,将字符串序列中的各字符取出来放进列表中:
1 >>> [ i for i in "abcdef" ]
2 ['a', 'b', 'c', 'd', 'e', 'f']
我是一名python开发工程师,整理了一套python的学习资料,从基础的python脚本到web开发、爬虫、
数据分析、数据可视化、机器学习、面试真题等。想要的可以进群:688244617免费领取
这里是列表解析,因为它外面使用的是中括号[]
,表示将操作后的元素放进新的列表中。可以将中括号替换成大括号,就变成了集合解析,甚至字典解析。但注意,没有直接的元组解析,因为元组的括号是特殊的,它会被认为是表达式的优先级包围括号,而不是元组构造符号。
取出元素对各元素做一番操作:
1 >>> [ i * 2 for i in "abcdef" ]
2 ['aa', 'bb', 'cc', 'dd', 'ee', 'ff']
3
4 >>> L = [1,2,3,4]
5 >>> [ i * 2 for i in L ]
6 [2, 4, 6, 8]
7
8 >>> [ (i * 2, i * 3) for i in L ]
9 [(2, 3), (4, 6), (6, 9), (8, 12)]
解析操作和for息息相关,且都能改写成for循环。例如,下面两个语句得到的结果是一致的:
1 [ i * 2 for i in "abcdef" ]
2
3 L = []
4 for i in "abcdef":
5 L.append(i * 2)
但是解析操作的性能比for循环要更好,正符合越简单越高效的理念。
学过其他语言的人,估计已经想到了,解析过程中对各元素的表达式操作类似于回调函数。其实在python中有一个专门的map()函数,它以第一个参数作为回调函数,并返回一个可迭代对象。也就是说,也能达到和解析一样的结果。例如:
1 >>> def f(x):return x * 2
2 ...
3 >>> list(map(f,[1,2,3,4]))
4 [2, 4, 6, 8]
篇幅有限,map()函数在这里就不多做赘述了,觉得文章还可以的话不妨点个赞,有任何意见或者看法欢迎大家评论!