Python含'in'条件的if语句处理[3,3]数组时失效问题排查
LeetCode「检查重复项」代码错误原因解析
我正在做LeetCode的「检查重复项」题目,当函数接收数组[3,3]时,编写的代码中本应返回True的if语句未生效。以下是我的代码:
def containsDuplicate(nums) -> bool: list = {} for i in range (len(nums)): if 3 in list: return True else: list[i] = nums[i] print(list[i]) return False print(containsDuplicate([3, 3]))请问有人知道该if语句未按预期工作的原因吗?我知道可以用set或哈希表实现,但想搞懂当前代码的错误所在。
核心错误点
- 字典键值存储逻辑完全颠倒:你把数组的索引
i作为字典的键,数组元素nums[i]作为值,但if 3 in list是在检查字典的键中是否存在3——而你的字典键永远是0、1这类索引数字,不可能出现3,所以这个判断永远不会触发返回True。 - 硬编码判断值3:就算存储逻辑正确,直接判断
3 in list也只对包含3的重复项生效,换个测试用例比如[2,2]照样失效,正确的做法应该判断当前遍历的元素是否已存在于字典中。
修正后的哈希表实现代码
def containsDuplicate(nums) -> bool: num_dict = {} # 避免用list作为变量名,会覆盖Python内置的list类型 for num in nums: # 直接遍历数组元素,无需索引更简洁 if num in num_dict: return True num_dict[num] = True # 值可以是任意内容,只要键是数组元素即可 return False print(containsDuplicate([3, 3])) # 此时会正确返回True
内容的提问来源于stack exchange,提问作者Sebastian Presno Alvarado
相关产品推荐
相关产品推荐

