如何实现嵌套列表元素的int与datetime类型合并转换?
问题描述
我有一个名为lol的嵌套列表,内容如下:
[['365', '336', '365', 'E<;;EjD'], ['365', '336', '365', 'E<;;EkD'], ['365', '336', '365', 'E<;;F0D'], ['0', '0', '335', 'E<;;GaQ'], ['0', '0', '335', 'E<;;GbQ']]
需要对lol做转换:每个子列表的前三个字符串转为int类型,最后一个字符串通过dateConverter()转换为datetime类型,预期输出如下:
[[365, 336, 365, '2021-12-11T21:58:20'], [365, 336, 365, '2021-12-11T21:58:20'], [365, 336, 365, '2021-12-11T21:59:20'], [0, 0, 335, '2021-12-11T22:0:20'], [0, 0, 335, '2021-12-11T22:1:20']]
我已经掌握分别转换的方法:
- 前三个字符串转
int的代码:
[list(map(int, li[:-1])) for li in lol]
- 最后一个字符串转datetime的代码:
list(map(dateConverter, [li[-1] for li in lol]))
但不知道怎么合并这两个操作,尝试了下面的代码但无法运行:
[list(map(int, dateConverter, li[:-1], li[-1])) for li in lol]
请求指导如何实现合并转换。
解决方案
方法1:列表推导式直接拼接
这是最直观的实现方式,把你已掌握的两个转换操作直接拼接,每个子列表单独处理:
# 用列表推导式处理前三个元素,再拼接转换后的最后一个元素 [[int(x) for x in li[:-1]] + [dateConverter(li[-1])] for li in lol] # 或者用map处理前三个元素,转列表后拼接 [list(map(int, li[:-1])) + [dateConverter(li[-1])] for li in lol]
这种写法逻辑清晰,可读性强,完全复用你已有的代码片段。
方法2:自定义函数配合map
如果想用map实现整体转换,可以先封装单个子列表的转换逻辑,再批量应用:
def convert_sublist(sublist): # 处理前三个元素转int,最后一个元素转datetime converted_first_three = list(map(int, sublist[:-1])) converted_last = dateConverter(sublist[-1]) return converted_first_three + [converted_last] # 应用到整个嵌套列表 result = list(map(convert_sublist, lol))
这种方式把转换逻辑模块化,后续修改规则时只需调整函数内部即可。
你的尝试失败原因
你之前的代码list(map(int, dateConverter, li[:-1], li[-1]))错误在于:map的第一个参数是要执行的函数,后续参数是可迭代对象。你把dateConverter(一个函数)和多个可迭代对象混传,map会尝试将int函数应用到dateConverter、li[:-1]的元素、li[-1]的每个字符上,完全不符合需求,因此无法运行。
内容的提问来源于stack exchange,提问作者joe
相关产品推荐
相关产品推荐

