如何将3D列表转换为2D列表?现有尝试未达预期
解决3D列表转指定2D列表的问题
你遇到的问题是因为原来的列表推导式把所有最内层的子列表都直接平铺到了一个大列表里,没有保留第二层的分组结构。我们需要针对每个第二层的子列表单独处理,把里面的元素合并成一个新列表。
方法一:嵌套列表推导式(最直观)
这种方法适配你的示例场景(最内层都是单元素列表),我们遍历每个第二层的子列表,再取出每个最内层列表里的唯一元素:
list_1 = [[[3], [4]], [[5], [6]], [[7], [8]]] list_2 = [[item[0] for item in sub_list] for sub_list in list_1] print(list_2) # 输出: [[3, 4], [5, 6], [7, 8]]
方法二:用sum()合并子列表
如果最内层的列表可能包含多个元素(比如[[[3, 1], [4]], [[5], [6, 2]]]),这种方法可以直接合并所有最内层的列表,通用性更强:
list_1 = [[[3], [4]], [[5], [6]], [[7], [8]]] list_2 = [sum(sub_list, []) for sub_list in list_1] print(list_2) # 输出: [[3, 4], [5, 6], [7, 8]]
为什么原来的代码不符合预期?
你写的[e for sl in lst for e in sl]是单层展开的列表推导式,它会遍历所有第二层的子列表sl,然后把sl里的每个元素e直接放到结果列表中,相当于把3D列表变成了[[3], [4], [5], [6], [7], [8]],没有保留第二层的分组结构,所以和你想要的结果不符。
内容的提问来源于stack exchange,提问作者user11214393
相关产品推荐
相关产品推荐

