列表实战——列表迭代和 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 表达式。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~