Python实现两数之和遇AttributeError错误,求解决方案
解决两数之和代码的AttributeError及逻辑问题
1. 解决直接报错:AttributeError: 'tuple' object has no attribute 'split'
- 错误原因:你将输入的字符串转成了
tuple,但split()是字符串类型专属方法,元组没有这个属性,所以触发报错。 - 修复方法:删除
t = tuple(n)这一行,直接对输入的字符串n调用split(','),即把nums = t.split(',')改为nums = n.split(',')。
2. 修正代码中的其他逻辑错误
原代码除了上述报错,还有多处逻辑问题需要修正:
nums是字符串列表,必须转换成整数列表,否则后续减法、数值比较都会出错- 变量
k未定义,需要通过索引遍历获取元素位置 - 原逻辑只检查第一个元素的补数,无法覆盖所有情况(比如目标和由数组中后两个元素组成的场景)
修正后的完整代码
def twoSum(): # 读取输入并转换为整数数组 n = input("请输入整数数组,用逗号分隔:") nums = list(map(int, n.split(','))) target = int(input("请输入目标值:")) # 用哈希表优化查找,时间复杂度O(n) num_index_map = {} for idx, num in enumerate(nums): complement = target - num if complement in num_index_map: print([num_index_map[complement], idx]) return num_index_map[num] = idx # 未找到符合条件的数对时提示 print("不存在和为目标值的两个数") twoSum()
代码说明
list(map(int, n.split(','))):将输入的字符串分割后,批量转换为整数类型- 哈希表
num_index_map存储已遍历数字的索引,每次计算当前数字的补数,若补数已在表中,直接返回对应的两个索引 - 仅遍历一次数组,相比双重循环的O(n²),时间效率提升至O(n)
内容的提问来源于stack exchange,提问作者Rahul Yadav
相关产品推荐
相关产品推荐

