You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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()更安全可靠。

你的代码问题分析

你说无法进入内层循环的判断逻辑,核心问题有两个:

  1. 字符串未转成整数且未处理换行符
    readlines()读取的每一行都是带换行符的字符串,比如某行是"1000\n",此时data[i]+data[j]是字符串拼接操作(比如得到"1000\n1020\n"),和整数2020完全不相等,所以判断条件永远不成立。

  2. 异常处理的语法错误
    代码里的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:35:55