Python中map()多变量赋值及未定义student变量可运行问题咨询
a,y = map(int, input().split()) scores = [map(float, input().split()) for _ in range(y)] [print(sum(student)/y) for student in zip(*scores)]
问题1:map()方法为何可以直接给2个变量赋值
这是Python的可迭代对象解包特性,和map本身没有特殊关联,只要等号右侧的可迭代对象包含的元素数量,和左侧变量的数量完全匹配,就可以直接完成赋值。
这行代码的具体运行逻辑:
input().split()会读取输入的第一行内容,按空白字符分割成字符串列表,本题要求第一行输入两个值(学生数、科目数),所以分割后会得到长度为2的列表,比如输入3 2就会得到['3', '2']map(int, 输入分割后的列表)会把列表里的每个元素都转换为int类型,返回一个包含2个int元素的map可迭代对象- 右侧可迭代对象刚好有2个元素,和左侧的
a,y两个变量一一对应,就完成了解包赋值,和直接写a,y = [1,2]的逻辑完全一致。
问题2:未提前定义student变量为什么可以正常运行
student是列表推导式里声明的临时循环变量,不需要提前在外部定义。
Python列表推导式的语法为[执行的操作 for 循环变量 in 遍历的可迭代对象],这里for关键字后面跟的student就是在声明当前循环的临时变量,它的作用域仅在这个列表推导式内部,推导式运行结束后外部无法访问这个变量,所以不需要提前定义也能正常运行。
内容的提问来源于stack exchange,提问作者EXPLICIT GAMING
相关产品推荐
相关产品推荐

