列表实战——列表迭代和 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
发起讨论 只看当前版本


暂无话题~