Python字典推导式中for循环与zip函数的逻辑理解咨询
关于Python字典推导式与zip函数的疑问解答
先把你的代码和输出放出来,方便对照:
你的代码
import numpy as np Class_numbers=np.array(['a','b','c']) students_per_class=np.array([10,20,30]) print("Students counts per class:\n{}".format( {x: y for x, y in zip(Class_numbers, students_per_class)}))
代码输出
Students counts per class: {'a': 10, 'b': 20, 'c': 30}
你已经理解了{}和.format()的字符串格式化逻辑,那咱们就重点拆解你疑惑的for x, y in zip(Class_numbers, students_per_class)这部分:
第一步:先搞懂zip()函数到底在做什么
zip()就像现实里的拉链,它会把两个(或多个)序列里对应位置的元素两两配对,生成一个迭代器。
放到你的代码里:
Class_numbers是['a','b','c'],students_per_class是[10,20,30]- 经过
zip()处理后,会生成这样的配对元组:('a',10)、('b',20)、('c',30)
你可以自己单独测试这个逻辑,比如运行list(zip(Class_numbers, students_per_class)),会直接得到[('a', 10), ('b', 20), ('c', 30)],一下子就直观了对吧?
第二步:理解字典推导式的循环解包
字典推导式的格式是{键: 值 for 元素 in 可迭代对象},这里的for x, y in ...其实是在解包zip生成的每个元组:
- 每循环一次,zip输出的一个元组(比如第一个是
('a',10))会被拆成x='a'和y=10 - 接着把
x当成字典的键,y当成对应的值,逐个添加到新字典里
换句话说,这个推导式完全等价于你手动写循环:
result_dict = {} for x, y in zip(Class_numbers, students_per_class): result_dict[x] = y
这样一步步走下来,就生成了你看到的最终字典啦。
内容的提问来源于stack exchange,提问作者Ehsan
相关产品推荐
相关产品推荐

