列表实战——列表迭代和 comprehensions | 第二部分 类型与操作 —— 第 8 章: 列表和字典 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-江南app体育官方入口
更一般地,列表响应于前一章用在字符串上的所有序列操作,包括迭代工具:
>>> 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表达式。