如何合并同日期二维列表?Python代码相关技术咨询
列表合并问题解决方案
需求1:特定规则合并两个列表
实现逻辑:遍历两个列表的对应位置元素,仅当第二个列表的元素与第一个列表不同时,用第二个元素替换第一个的对应位置,否则保留第一个元素。
def merge_lists(list1, list2): if len(list1) != len(list2): raise ValueError("两个列表长度必须一致") return [b if b != a else a for a, b in zip(list1, list2)]
示例用法:
list_a = ['19-12-2022', '-', '-', '-', '-'] list_b = ['19-12-2022', 'MATH111: P', '-', 'HU108: P', '-'] merged = merge_lists(list_a, list_b) # 输出: ['19-12-2022', 'MATH111: P', '-', 'HU108: P', '-']
需求2:合并同日期的二维子列表
实现逻辑:用字典按日期分组,初始化每个日期的记录为日期加全占位符-,再遍历所有子列表,将非占位符的元素填充到对应位置。
def merge_same_date_records(records): merged_dict = {} for record in records: date = record[0] # 首次遇到该日期时初始化合并记录 if date not in merged_dict: merged_dict[date] = [date] + ['-' for _ in range(len(record)-1)] # 填充非'-'的有效数据 for idx, item in enumerate(record[1:], start=1): if item != '-': merged_dict[date][idx] = item # 将字典值转为列表返回 return list(merged_dict.values())
测试你的输入数据:
输入的二维列表传入函数后,输出结果为:
[ ['19-12-2022', 'MATH161: A', 'MATH111: P', 'HU108: P', '-', '-', '-', '-', '-'], ['21-12-2022', 'CS110lab: P', '-', '-', '-', '-', '-', '-', '-'] ]
结合原代码优化生成流程
原代码生成的tableOfAttendance包含大量同日期的重复子列表,可直接在生成后调用上述合并函数,一步得到最终结果:
修改原代码末尾部分:
# 替换原代码中tableOfAttendance生成后的打印及后续步骤 tableOfAttendance = merge_same_date_records(tableOfAttendance) [print(d) for d in tableOfAttendance] cur.close() db.close() attendanceDataFrame = pd.DataFrame(tableOfAttendance, columns=(['Date'] + timeTableTimes)) return attendanceDataFrame
内容的提问来源于stack exchange,提问作者Whiz
相关产品推荐
相关产品推荐

