为何字典中的值未符合range()函数生成的预期值?
问题分析与解决方法
嘿,这个问题和range()函数没啥关系,问题出在你嵌套循环的逻辑上!让我给你拆解清楚:
为什么会得到全是4的结果?
先看你的代码逻辑,不管是字典推导式还是普通嵌套循环,本质都是:
- 外层循环遍历每个键
i:1、3、5、7、9 - 对每个
i,内层循环遍历所有的j:10、8、6、4(注意range(10,2,-2)的结束值是2,是不包含的,所以实际生成的序列是10→8→6→4,不会到2) - 每次循环都执行
dict[i] = j,这意味着同一个i会被反复赋值,最后保留的是内层循环最后一次的j值,也就是4。
所以每个键最后都被覆盖成了4,这就导致了你的结果和预期不符。
如何得到预期的一一对应结果?
你需要的是把两个序列的元素一一配对,而不是嵌套遍历。这里用zip()函数就能完美解决,它会把两个可迭代对象的对应元素打包成元组:
方法1:字典推导式
my_dict = {i: j for i, j in zip(range(1,10,2), range(10,1,-2))} print(my_dict) # 输出:{1: 10, 3: 8, 5: 6, 7: 4, 9: 2}
这里注意把range(10,2,-2)改成range(10,1,-2),这样结束值1不包含,就能生成10、8、6、4、2完整的序列。
方法2:普通循环写法
my_dict = {} for i, j in zip(range(1,10,2), range(10,1,-2)): my_dict[i] = j print(my_dict)
额外提醒
尽量不要用dict作为变量名哦,它是Python的内置类型名称,会覆盖掉原有的内置函数,容易引发后续的奇怪问题。
内容的提问来源于stack exchange,提问作者patrick chong
相关产品推荐
相关产品推荐

