使用itertools.combinations求解两数之和时如何获取元素对应下标
两数之和问题修正方案
原代码核心问题
- 你调用
combinations(a,2)生成的是列表值的二元组合,而非下标的组合,所以拿到的tuple是两个数值,无法直接作为列表索引使用 - 条件判断中的
sum(i) in a属于无效逻辑:你仅需要校验两数之和等于target,不需要验证和是否存在于原列表中 - 不需要额外判断组合内的元素是否属于原列表:
combinations是直接从传入的列表中提取元素生成的组合,天然满足元素归属条件 enumerate(a[i])写法完全错误,且你没有存储、返回找到的下标结果,函数无输出
修正后代码
直接生成下标的二元组合进行校验,符合条件直接返回即可:
from itertools import combinations def twoSum(nums, target): # 遍历所有不重复的下标二元组合 for idx1, idx2 in combinations(range(len(nums)), 2): if nums[idx1] + nums[idx2] == target: return [idx1, idx2]
测试验证
输入测试用例nums = [1,2,3,5,6]、target=5时,函数返回[1,2],与预期输出一致。
补充说明:如果坚持用值组合的方案查找下标,遇到列表存在重复值时会出现下标匹配错误(例如
nums=[2,2]、target=4的场景,用list.index()方法会两次返回第一个2的下标),因此直接遍历下标组合的方案兼容性更强。
内容的提问来源于stack exchange,提问作者Butterman
相关产品推荐
相关产品推荐

