带有奇怪返回功能的循环?



我对下面的代码有一个问题,特别是第 6 行;说它返回target-nums[I]的索引是否正确?如果是这样,为什么在它之后还有另一个I

另外,comp[nums[I]] = I在做什么?如果它不在 comp 中,它是否将 nums 的值分配给 comp?

最后,最终返回 [ ] 在最后一行代码中做什么?

def TwoSum(nums, target):
comp = {}            
for i in range(len(nums)):
if (target - nums[i]) in comp:
return [comp[target - nums[i]],i]
comp[nums[i]] = i
return []
print(TwoSum(nums,target))

说它返回目标编号[I]的索引是正确的吗? 如果是这样,为什么它后面还有另一个"我"?

它返回两个项目的列表,第一个项目是comp[target - nums[i]],第二个项目是i。这与以下想法相同:

def addAndSubtract(x, y):
return [x+y, x-y]

上面,我们返回一个列表,列表中的第一项是评估x+y的值,第二个值是评估x-y的结果。

另外,comp[nums[I]] = I 在做什么?如果它还没有在 comp 中,它是否将 nums 的值分配给 comp>?

这会将nums[i]的值分配为comp字典中的键,并为其分配值i。它基本上将当前值存储在nums中,并与其索引一起存储。这样做有两件事:

  1. 允许您通过检查它是否是comp字典中的键来轻松快速地检查您是否看到了给定的数字

  2. 允许您检查该号码上次在列表中出现的位置。

每次 for 循环运行时都会发生comp[nums[i]] = i,因此它将对列表中的所有数字执行此操作,除非它在 if 语句中返回。如果您碰巧再次遇到相同的数字(已经在您的列表中),那么此赋值将简单地用当前数字的当前索引(即:i)覆盖该值。

最后,最终返回 [ ] 在最后一行代码中做什么?

这样做的目的是返回一个空列表。这只是表示未找到结果的一种方式。只有当您遍历列表中的所有数字并且没有从 for 循环中返回时,您才会到达该返回值,因此表明无法达到target的总和。

我在这里详细解释了这个算法是如何工作的,所以如果你需要更多的解释,你可能想看看。虽然这个问题是一个 JavaScript 问题,但解释的逻辑与此完全相同。

最新更新