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("未找到该日期的记录")
为什么这样优化后速度会大幅提升?
- 字典查找的本质优势:不管文件里有多少条记录,字典的哈希查找都是瞬间完成的,不像原来要逐条遍历比对。
- 简化数据处理流程:原来的代码用了三次循环(读行、分割、清洗),现在一次循环就完成所有处理,减少了内存操作和循环开销。
- 复用数据加载结果:原来的代码如果多次查询,每次都要重新读取文件并处理列表;现在只在程序启动时加载一次字典,后续查询直接复用,进一步节省时间。
如果需要额外优化,还可以给输入做个简单的格式校验(比如检查是否符合m/d/yyyy格式),避免无效输入导致的错误,但这部分不影响核心执行效率。
内容的提问来源于stack exchange,提问作者VirtuosoMessi
相关产品推荐
相关产品推荐

