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

如何提升Python中列表追加元素及后续检查操作的效率?附算法超时问题求助与平台选择咨询

优化Python代码解决超时问题 + Stack Overflow适用性解答

嘿,我来帮你搞定这个超时问题,顺便解答你关于Stack Overflow的疑问!

为什么你的代码会超时?

你当前用列表的in操作来检查元素是否属于红队或蓝队,这个操作的核心问题是:列表的查找是线性遍历——每次检查a in red都要把整个列表从头扫一遍,当列表里的元素越来越多,每次检查的耗时就会成倍增加。如果输入的m很大(比如几万甚至几十万次操作),整体运行时间就会直接超出限制。

优化方案:用集合/字典代替列表

我们需要一种O(1)时间复杂度的查找方式,Python里的集合(set)或者字典(dict)正好满足这个需求——它们基于哈希表实现,查找元素是否存在的时间几乎是常数,不管数据量多大,速度都不会明显下降。

方案1:用集合实现(直观对应你的原逻辑)

把原来的red和blue列表换成集合,这样每次检查元素归属会快很多:

input_file = open("tagin.txt","r")
n, m = map(int, input_file.readline().split())

# 用集合代替列表,加快查找速度
red = {1}
blue = {2}
re = 1
bl = 1

for _ in range(m):
    a, b = map(int, input_file.readline().split())
    if a in red:
        # 避免重复添加已在队伍中的元素(如果题目保证b是新元素,这步可省略)
        if b not in red and b not in blue:
            red.add(b)
            re += 1
    elif a in blue:
        if b not in red and b not in blue:
            blue.add(b)
            bl += 1

output_file = open("tagout.txt", "w")
output_file.write(f"{re} {bl}")
output_file.close()

方案2:用字典实现(更简洁高效)

我们可以用一个字典记录每个元素所属的队伍,这样只需要一次查找就能确定a的归属,代码更简洁:

input_file = open("tagin.txt","r")
n, m = map(int, input_file.readline().split())

# 字典记录元素对应的队伍
team_map = {1: 'red', 2: 'blue'}
re = 1
bl = 1

for _ in range(m):
    a, b = map(int, input_file.readline().split())
    if a in team_map:
        # 只处理未分配队伍的b
        if b not in team_map:
            team = team_map[a]
            team_map[b] = team
            re += 1 if team == 'red' else 0
            bl += 1 if team == 'blue' else 0

output_file = open("tagout.txt", "w")
output_file.write(f"{re} {bl}")
output_file.close()

这两种方案都能大幅提升代码速度,完全不需要导入任何额外模块。

关于Stack Overflow的适用性

Stack Overflow完全适合这类问题!只要你像现在这样,把问题描述清楚:包括你的代码、遇到的具体问题(超时)、输入输出示例,以及你已经尝试过的思路,其他开发者非常乐意帮忙解答。你的提问方式已经符合Stack Overflow的规范,完全可以在那里提问。

内容的提问来源于stack exchange,提问作者Checkmate1941

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:37:37