Python学习手册(第4版).5
map是对原数组的加工,filter对原数组的过滤。用法相同接受一个函数和列表.
括号中的解析语法也可以用来创建产生所需结果的生成器(例如,内置的sum函数,按一种顺序汇总各项):
>>> G = (sum(row) for row in M) # Create a generator of row sums
>>> next(G)
6
>>> next(G) # Run the iteration protocol
15
Next有两个参数,第一个参数表示要访问的可迭代的列表或者元组,第二个元素为访问完后显示的值,默认next从左到右依次访问,第一次返回第一个元素.
Python中的字典是完全不同的东西:它们不是序列,而是一种映射(mapping)。映射是一个其他对象的集合,但是它们是通过键而不是相对位置来存储的。实际上,映射并没有任何可靠的从左至右的顺序。它们简单地将键映射到值。字典是Python核心对象集合中的唯一的一种映射类型,也具有可变性——可以就地改变,并可以随需求增大或减小,就像列表那样。
字典的索引操作使用的是和序列相同的语法,但是在方括号中的元素是键,而不是相对位置。
字典可以嵌套使用我懒得打字了,就不演示了
如果在一个字典的元素中,我们确实需要强调某种顺序的时候,应该怎样做呢?一个常用的解决办法就是通过字典的keys方法收集一个键的列表,使用列表的sort方法进行排序,然后使用Python的for循环逐个进行显示结果(正如第3章所介绍的,确保在循环的代码下面两次按下Enter键,交互提示模式中的一个空行意味着“执行”,某些接口中提示符是“…”):
>>> Ks = list(D.keys()) # Unordered keys list
>>> Ks # A list in 2.6,"view" in 3.0: use list()
['a','c','b']
>>> Ks.sort() # Sorted keys list
>>> Ks
['a','b','c']
>>> for key in Ks: # Iterate though sorted keys
print(key,'=>',D[key]) # <== press Enter twice here
a => 1
b =>2
c=> 3
如果for循环看起来就像之前介绍的列表解析表达式一样,那也没错。它们都是真正的通用迭代工具。事实上,它们都能够工作于遵守迭代协议(这是Python中无处不在的一个概念,表示在内存中物理存储的序列,或一个在迭代操作情况下每次产生一个元素的对象)的任意对象。如果一个对象在响应next之前先用一个对象对iter内置函数做出响应,那么它属于后一种情况。我们在前面所见到的生成器解析表达式就是这样的一个对象。
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
现在记住,从左到右地扫描一个对象的每个Python工具都使用迭代协议。