You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何字典中的值未符合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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:24:06