如何用Python快速查找文本文件中和为2020的两数?代码循环问题排查
找出文本中两数之和为2020的数对:高效解法与代码问题排查
最简单且高效的实现方法
要解决这个问题,最高效的方式是利用**集合(Set)**做快速查找,时间复杂度能降到O(n),比双重循环的O(n²)高效得多,数字数量越多优势越明显。具体思路如下:
- 先把文件里的每行内容转换成整数(注意去除换行符)
- 遍历每个数字时,计算
2020 - 当前数字得到目标差值 - 检查这个差值是否已经在我们维护的集合里:
- 如果存在,说明找到了和为2020的数对
- 如果不存在,就把当前数字加入集合继续遍历
对应的代码示例:
def find_2020_pair(file_path): seen = set() try: with open(file_path, 'r') as f: for line in f: num = int(line.strip()) # 去除换行符并转成整数 target = 2020 - num if target in seen: print(f"找到符合条件的数对:{num} 和 {target}") return num * target # 如果需要乘积可返回,按需调整 seen.add(num) print("没有找到和为2020的数对") except Exception as e: print(f"文件加载失败:{str(e)}") # 调用函数 find_2020_pair('/Users/korbinianschleifer/desktop/input.txt')
这里用with语句打开文件,会自动处理文件关闭,比手动调用close()更安全可靠。
你的代码问题分析
你说无法进入内层循环的判断逻辑,核心问题有两个:
字符串未转成整数且未处理换行符
readlines()读取的每一行都是带换行符的字符串,比如某行是"1000\n",此时data[i]+data[j]是字符串拼接操作(比如得到"1000\n1020\n"),和整数2020完全不相等,所以判断条件永远不成立。异常处理的语法错误
代码里的except x:是错误写法,x没有定义,应该写成except Exception as x:或者针对文件异常的except IOError as x:,否则遇到文件问题时会直接报错,不会执行提示语句。
修复后的代码示例:
data = [] try: with open('/Users/korbinianschleifer/desktop/input.txt', 'r') as file: # 直接转成整数列表,处理换行符 data = [int(line.strip()) for line in file.readlines()] except Exception as x: print(f'文件无法加载:{str(x)}') print(f"读取到{len(data)}个数字") for i in range(len(data)): for j in range(i+1, len(data)): if data[i] + data[j] == 2020: print(f'找到解决方案:{data[i]} 和 {data[j]}') # 找到后可退出循环,按需添加break
不过还是更推荐前面的集合解法,数据量大时效率提升非常明显。
内容的提问来源于stack exchange,提问作者Korschy
相关产品推荐
相关产品推荐

