Python3迭代

admin 阅读:54 2024-02-29

对于所有的集合,无论是有序集合(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。

声明

1、部分文章来源于网络,仅作为参考。
2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!