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

Python日期查询星期程序执行缓慢,如何优化代码提升效率?

如何优化Python日期查询程序的执行效率?

看起来你现在的问题出在用列表存储数据+线性遍历查找上——5年的日期数据虽然不算特别庞大,但每次查询都要扫一遍所有记录,自然会慢到近一分钟。咱们来一步步优化这个程序:

先还原你当前的完整代码(补充未写完的部分)

def getList():
    name = 'Calendar2018.txt'
    dates = open(name, 'r')
    newList = []
    for line in dates:
        newList.append(line)
    for i in range(0,len(newList)):
        newList[i] = newList[i].split(',')
    for i in range (0,len(newList)):
        for x in range (0,len(newList[i])):
            newList[i][x] = (str(newList[i][x]).translate(None,'"')).strip()
    return newList

userInp = raw_input("Enter a date: ")
date_list = getList()
# 推测后续的查找逻辑
for item in date_list:
    if item[0] == userInp:
        print("对应的星期是:", item[1])
        break

核心优化思路:用字典替代列表存储数据

列表的线性查找时间复杂度是O(n),而字典的哈希查找是O(1)——这是提升效率的关键。同时我们还能简化数据处理流程,减少不必要的循环开销。

优化后的完整代码

def get_date_week_map():
    filename = 'Calendar2018.txt'
    date_week_map = {}
    # 使用with语句自动管理文件句柄,更安全高效
    with open(filename, 'r') as f:
        for line in f:
            # 一行完成所有数据处理,直接存入字典
            raw_date, raw_week = line.strip().replace('"', '').split(',')
            # 统一清洗格式,避免空格或引号残留导致匹配失败
            clean_date = raw_date.strip()
            clean_week = raw_week.strip()
            date_week_map[clean_date] = clean_week
    return date_week_map

# 只加载一次数据!不用每次查询都重新读文件、处理列表
date_map = get_date_week_map()

user_input = raw_input("Enter a date (m/d/yyyy): ")
# 直接通过日期键获取星期,瞬间完成查找
if user_input in date_map:
    print(f"对应的星期是:{date_map[user_input]}")
else:
    print("未找到该日期的记录")

为什么这样优化后速度会大幅提升?

  1. 字典查找的本质优势:不管文件里有多少条记录,字典的哈希查找都是瞬间完成的,不像原来要逐条遍历比对。
  2. 简化数据处理流程:原来的代码用了三次循环(读行、分割、清洗),现在一次循环就完成所有处理,减少了内存操作和循环开销。
  3. 复用数据加载结果:原来的代码如果多次查询,每次都要重新读取文件并处理列表;现在只在程序启动时加载一次字典,后续查询直接复用,进一步节省时间。

如果需要额外优化,还可以给输入做个简单的格式校验(比如检查是否符合m/d/yyyy格式),避免无效输入导致的错误,但这部分不影响核心执行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:10:13