列表实战——列表迭代和 Comprehensions
更一般地,列表响应于前一章用在字符串上的所有序列操作,包括迭代工具:
>>> 3 in [1, 2, 3] # Membership
True
>>> for x in [1, 2, 3]:
... print(x, end=' ') # Iteration (2.X uses: print x,)
...
1 2 3
我们将在第 13 章中更正式地讨论表 8-1 中的 for
迭代和 range
内置函数,因为它们和句子语法有关。简言之,for
循环从左到右地遍历任何序列中的项,对每一项执行一个或多个语句;range
生成连续整数。
表 8-1 中的最后一项,列表 comprehensions 和 map
调用,在第 14 章中被更详细地阐述,且在第 20 章中被扩展。然而,它们的基本操作很简单 —— 如第 4 章中引入的, 列表 comprehensions 是通过将表达式应用到序列(其实,是任何可迭代对象)中每一项来构建新列表的一种方式,而且和 for
循环很像:
>>> res = [c * 4 for c in 'SPAM'] # List comprehensions
>>> res
['SSSS', 'PPPP', 'AAAA', 'MMMM']
这个表达式功能上和手动构建结果列表的 for
循环等价,但随后章节将学到:当今列表 comprehensions 更容易编码,而且很可能运行更快:
>>> res = []
>>> for c in 'SPAM': # List comprehension equivalent
... res.append(c * 4)
...
>>> res
['SSSS', 'PPPP', 'AAAA', 'MMMM']
如第 4 章中也简要介绍的,map
内置函数完成类似的工作,但将函数应用到序列中的项,并将所有结果收集到新列表中:
>>> list(map(abs, [−1, −2, 0, 1, 2])) # Map a function across a sequence
[1, 2, 0, 1, 2]
因为我们还没有为完整的迭代故事准备好,暂时将把进一步细节推迟,但在本章稍后请关注类似的字典 comprehension 表达式。
推荐文章: