Python遍历多列存储的新冠表格 设计循环定位单日全球病例峰值
实现逻辑与代码
核心思路是以“月份+日期”为唯一聚合键,先遍历所有记录累计每个自然日的全球总病例数,再从累计结果中找到病例数最高的日期即可,全程只需要线性遍历,不需要设计冗余的多层嵌套循环。
原生Python实现(无第三方依赖)
这种实现逻辑完全透明,不需要额外安装第三方库,哪怕数据量到几十万条也能顺畅运行:
- 初始化一个字典,用(月份值, 日期值)的元组作为键,存储对应日期的全球累计总病例数
- 借助四个列表长度完全一致的特性,通过同一索引遍历每一条原始记录,把单条记录的病例数累加到对应日期的字典条目下
- 遍历字典的所有条目,追踪累计病例数最高的日期即可
示例代码:
# 初始化每日总病例存储字典 daily_total_cases = {} # 逐记录遍历,一次完成所有日期的病例聚合 for record_idx in range(len(month)): m = month[record_idx] d = day[record_idx] case_count = cases[record_idx] date_key = (m, d) # 字典没有对应日期条目时初始化,存在则直接累加 daily_total_cases[date_key] = daily_total_cases.get(date_key, 0) + case_count # 遍历聚合结果找最高值 highest_total = -1 peak_date = None for (m, d), total in daily_total_cases.items(): if total > highest_total: highest_total = total peak_date = f"{m}月{d}日" print(f"全球总病例最高的日期为{peak_date},当日累计总病例为{highest_total}")
对应题面给出的示例数据运行后,会正确输出1月3日、总病例709的匹配结果。
大数据量场景的高效实现(基于pandas)
如果原始记录规模较大,用pandas的分组聚合可以大幅减少手写循环的代码量,运行效率也更高:
import pandas as pd # 直接把四个输入列表转为结构化表格 covid_df = pd.DataFrame({ "month": month, "day": day, "location": location, "cases": cases }) # 按月份、日期分组求总病例,取排序后最高值对应的行 peak_row = covid_df.groupby(["month", "day"])["cases"].sum().sort_values(ascending=False).iloc[0] print(f"全球总病例最高的日期为{int(peak_row.name[0])}月{int(peak_row.name[1])}日,当日累计总病例为{peak_row}")
实现注意事项
- 不需要特意设计嵌套循环逐月、逐天匹配所有记录,线性遍历一次做聚合的时间复杂度为O(n)(n为总记录数),是效率最高的循环结构
- 不需要额外校验日期合法性(比如判断某月是否有31天、2月天数等),原始列表中本身就只包含实际存在的日期记录
- 不要用字符串拼接日期作为字典键,直接用(month, day)的元组做键,既避免格式拆分的麻烦,也不会出现月份/日期格式不一致的匹配错误
内容的提问来源于stack exchange,提问作者ls14
相关产品推荐
相关产品推荐

