最近在将zip函数用于处理多个迭代器同时遍历的过程中,遇到了如下的问题:
首先,各大教程网站中,给出的zip()函数的用法是,定义了迭代器对象x,y,那么通过zip函数可以同时遍历x,y。这会给予一种错误的理解就是说,在写代码的过程中,zip()函数的输入一定是写死的,不能根据外部参数的设计,改变其编码的迭代器数量。比如:
class_1=[1,2,3,4,5]
class_2=[6,7,8,9,10]
for i in zip(class_1,class_2):
print(i[0])
print(i[1])
#或者是
class_1=[1,2,3,4,5]
class_2=[6,7,8,9,10]
class_3=[11,12,13,14,15]
for i in zip(class_1,class_2,class_3):
print(i[0])
print(i[1])
print(i[2])
可以试想,如果是当前的编写方式,zip函数的输入是不灵活的,当后续想要增加班级列表的时候,需要重写代码,又或者是班级列表很多时,需要大量的复制粘贴,并且容易出错。
为了解决这一问题,我考虑到日常使用的 “*”操作符,比如def function_1(*args)的用途
可以将上述的代码修改为:
class_1=[1,2,3,4,5]
class_2=[6,7,8,9,10]
class_3=[11,12,13,14,15]
class_4=[16,17,18,19,20]
#假定以上是数据库中的班级信息
class_list=obtain_class_data_from_database()
class_num=len(class_list)
# 该代码表示从外部接口obtain_class_data_from_database()获取当前学校班级的列表
for i in zip(*class_list):
for c in range(class_num):
print(i[c])
可以看到,这种编写方式可以很容易的适应外部输入的迭代器数量的变化



