如何修改嵌套列表中子列表首元素的日期格式并保留原结构?
解决嵌套列表中日期格式转换并保留结构的问题
你原来的列表推导式只提取了转换后的日期,没有保留每个子列表的完整结构。要保留嵌套结构,只需要在推导式中生成包含转换后日期和原数值的新子列表即可。
修正后的代码(含函数实现)
import datetime def convert_date_format(datelist): return [ [datetime.datetime.strptime(item[0], "%Y/%m/%d").strftime("%d.%m.%Y"), item[1]] for item in datelist ] # 测试示例 datelist = [["2019/04/12", 7.0], ["2019/02/09", 7.3], ["2018/08/14", 6.1]] result = convert_date_format(datelist) print(result)
输出结果
[["12.04.2019", 7.0], ["09.02.2019", 7.3], ["14.08.2018", 6.1]]
关键说明
- 原代码的问题:
[datetime... for i in datelist]只返回了转换后的日期字符串,相当于把每个子列表替换成了单个字符串,自然丢失了嵌套结构。 - 修正逻辑:对每个子列表
item,生成一个新的子列表[转换后的日期, item[1]],这样既修改了日期格式,又保留了原有的嵌套列表结构和数值部分。 - 关于
strptime和strftime:strptime(item[0], "%Y/%m/%d"):把字符串解析成datetime对象,%Y/%m/%d对应原日期的yyyy/mm/dd格式。.strftime("%d.%m.%Y"):把datetime对象格式化为指定的dd.mm.yyyy字符串。
扩展:处理可能的异常(可选)
如果输入的列表中存在格式不正确的日期,可以添加异常处理,避免程序崩溃:
import datetime def convert_date_format(datelist): converted = [] for item in datelist: try: new_date = datetime.datetime.strptime(item[0], "%Y/%m/%d").strftime("%d.%m.%Y") converted.append([new_date, item[1]]) except ValueError: # 保留原数据或做其他自定义处理 converted.append(item) return converted
内容的提问来源于stack exchange,提问作者hiz
相关产品推荐
相关产品推荐

