Python3迭代
对于所有的集合,无论是有序集合(str,tuple,list)还是无序集合(set,dict), 我们都可以通过 for 循环来遍历该集合,这种遍历我们称为迭代(Iteration)。
对于所有集合的迭代,带入的都是集合中的成员(dict 带入的是键),在 Python 中,迭代是通过 for...in
来完成的。
集合迭代
我们知道 for...in
遍历有序集合的时,
带入的是集合中的单个成员,这里的单个成员变量可以是任何类型的,比如成员本身也可以是个集合。
mylist = [1, "hello", [1, 2], (1,), {"a": 1}] for item in mylist: print(item)
用 for...in
遍历无序集合 set 时,带入的是 set 中的单个成员,
但要注意 set 的内存结构和 dict 一样都是按 hash 表存储的,和我们创建时候给的顺序不一定一致。
myset = set(["a", "b", (1, 2)]) for item in myset: print(item)
用 for...in
遍历无序集合 dict 时,带入的并不是 dict 的单个成员变量,而是 dict 单个成员变量的 key。
mydict = {"a": 1, "b": 2, "c": 3} for item in mydict: print(item)
用 for...in
直接遍历 dict 的 keys 函数,values 函数和 items 函数。
students_dict = {"name": "ruhua", "age": 18} for student in students_dict.keys(): print(student) # 带入的是键 for student in students_dict.values(): print(student) # 带入的是值 for student in students_dict.items(): print(student) # 带入的是成员
Iterable 和 enumerate
如何判断一个对象是可迭代对象呢?方法是通过 collections 模块的 Iterable 类型判断。
from collections.abc import Iterable myint = 2 myfloat = 2.2 mybool = True mynone = None mystr = "hello" mylist = [1, 2, 3] mytuple = (1, 2, 3) myset = set([1, 2, 3]) mydict = {"a": 1, "b": 2, "c": 3} print(isinstance(myint, Iterable)) # False print(isinstance(myfloat, Iterable)) # False print(isinstance(mybool, Iterable)) # False print(isinstance(mynone, Iterable)) # False print(isinstance(mystr, Iterable)) # True print(isinstance(mylist, Iterable)) # True print(isinstance(mytuple, Iterable)) # True print(isinstance(myset, Iterable)) # True print(isinstance(mydict, Iterable)) # True
如果要对集合实现类似 c++,java 等那样的下标循环怎么办呢,Python
内置的 enumerate 函数可以把一个集合变成索引-成员对,这样就可以在 for...in
中同时迭代索引和成员(dict 是键)本身。
mylist = [1, 2, 3] mydict = {"a": 1, "b": 2, "c": 3} for index, item in enumerate(mylist): print(index, item) for index, item in enumerate(mydict): print(index, item)
用 for...in
遍历集合时,我们得到的是集合的单个成员(dict
是 key),如果集合的单个成员也是一个集合,
我们可以用多个变量来带入该成员的成员,注意带入的变量个数必须和该成员每个成员的个数一致。
mylist = [(1, 2), (3, 4), (5, 6)] mydict = {(1, 2): 1, (3, 4): 2, (5, 6): 3} for itemone, itemtwo in mylist: print(itemone, itemtwo) for index, item in mydict: print(itemone, itemtwo) for itemone, itemtwo, itemthree in mylist: # 错误 print(itemone, itemtwo)
注意如果想用多个变量带入集合的成员,必须确保集合的成员是个集合,且集合成员的成员个数 是一样的。
mylist = [(1, 2), (3, 4), (5, 6, 7)] for itemone, itemtwo in mylist: # 错误 pass
本节重要知识点
dict 遍历注意事项。
会使用 Iterable 和 enumerate。
评论列表