如何按时间区间将数据存入以变量i命名的独立列表?
按时间区间拆分数据到独立列表的实现方法
问题分析
你需要将包含Nome、Local、Hora字段的重复结构数据,按照intervalo字典定义的小时区间,分别存入list1到list4四个独立列表中,之前的代码将所有数据存入同一列表导致混杂,且尝试list[i]方式未成功,核心问题在于列表的初始化与索引映射逻辑有误。
解决方案
方法1:直接初始化独立列表并判断分配
先明确intervalo字典的结构(假设键对应列表编号1-4,值为小时区间元组),然后初始化四个空列表,遍历数据时判断Hora所属区间,将数据添加到对应列表:
# 初始化四个独立空列表 list1, list2, list3, list4 = [], [], [], [] # 示例时间区间字典(根据你的实际结构调整) intervalo = { 1: (0, 6), # 0点-6点 2: (6, 12), # 6点-12点 3: (12, 18), # 12点-18点 4: (18, 24) # 18点-24点 } # 模拟你的数据源(替换为实际数据) dados = [ {"Nome": "Maria", "Local": "Sala A", "Hora": "02:30"}, {"Nome": "João", "Local": "Sala B", "Hora": "08:15"}, {"Nome": "Ana", "Local": "Sala C", "Hora": "15:40"}, {"Nome": "Carlos", "Local": "Sala D", "Hora": "21:05"} ] # 遍历处理每个数据项 for item in dados: # 提取小时部分(如果Hora是datetime对象,直接用item["Hora"].hour;字符串则拆分转换) hora = int(item["Hora"].split(":")[0]) # 判断所属区间并添加到对应列表 if intervalo[1][0] <= hora < intervalo[1][1]: list1.append(item) elif intervalo[2][0] <= hora < intervalo[2][1]: list2.append(item) elif intervalo[3][0] <= hora < intervalo[3][1]: list3.append(item) elif intervalo[4][0] <= hora < intervalo[4][1]: list4.append(item) # 输出验证 print("list1内容:", list1) print("list2内容:", list2) print("list3内容:", list3) print("list4内容:", list4)
方法2:用列表容器管理子列表(更灵活)
如果后续可能调整区间数量,推荐用一个主列表管理所有子列表,通过索引映射分配数据,避免重复的条件判断:
# 初始化包含4个空列表的容器(对应list1到list4) lista_grupos = [[], [], [], []] # 时间区间字典 intervalo = { 1: (0, 6), 2: (6, 12), 3: (12, 18), 4: (18, 24) } # 模拟数据源 dados = [ {"Nome": "Maria", "Local": "Sala A", "Hora": "02:30"}, {"Nome": "João", "Local": "Sala B", "Hora": "08:15"}, {"Nome": "Ana", "Local": "Sala C", "Hora": "15:40"}, {"Nome": "Carlos", "Local": "Sala D", "Hora": "21:05"} ] # 遍历处理数据 for item in dados: hora = int(item["Hora"].split(":")[0]) # 匹配区间对应的列表索引(字典键1对应容器索引0,以此类推) for idx, (inicio, fim) in intervalo.items(): if inicio <= hora < fim: lista_grupos[idx - 1].append(item) break # 拆分出独立列表(可选) list1, list2, list3, list4 = lista_grupos
关于list[i]失败的原因
你之前尝试的list[i]方式出错,大概率是这两个问题:
- 未提前创建包含子列表的容器,直接调用内置
list类型的索引会报错; - 索引映射错误:Python列表索引从0开始,而你的区间编号是1-4,直接用
i作为索引会越界,需要用i-1对应容器的正确索引。
内容的提问来源于stack exchange,提问作者Thiago Ramos
相关产品推荐
相关产品推荐

