python - “扁平化”列表包含列表列表到列表列表
问题描述
这个问题不同于将列表列表/嵌套列表转换为没有嵌套的列表列表(这会产生一组非常具体的响应,但不能解决我的情况),也不同于许多“将列表扁平化到列表”的答案。
我想获取一个列表列表,其中一些又是列表列表,并“展平”为列表列表(不仅仅是列表!)。
作为一个具体的例子,我想从这个开始:
my_list_of_lists = [[1, 2, 3], [[9, 10], [8, 9, 10], [3, 4, 6]], [11, 12, 13]]
对此
target_list_of_lists = [[1, 2, 3], [9, 10], [8, 9, 10], [3, 4, 6], [11, 12, 13]]
(从视觉上看,我想把外层列表的所有[[
和]]
里面[
分别变成和]
。)
解决方案
这是一种方法:
def flatten(lst, dh=None):
# Added so user does not need to pass output list
if (dh is None):
dh = []
for elem in lst:
# Will not try to iterate through empty lists
if elem and (isinstance(elem[0], list)):
flatten(elem, dh)
else:
dh.append(elem)
return dh
my_list_of_lists = [[1, 2, 3], [[9, 10], [8, 9, 10], [3, 4, 6]], [11, 12, 13]]
target_list_of_lists = flatten(my_list_of_lists)
print(target_list_of_lists)
输出:
[[1, 2, 3], [9, 10], [8, 9, 10], [3, 4, 6], [11, 12, 13]]
这适用于任何长度和任何深度的列表。
推荐阅读
- r - 合并不同的单独文本行并按特定模式排序
- javascript - how to show text box when the value from combo box is selected for more than one
- math - 找到弹丸击中旋转圆的角度
- machine-learning - 分类器是如何分类的?
- sql-server - ASP.NET MVC 使用远程表调用存储过程
- node.js - 承诺不等待 firebase 查询完成并过早解决
- c# - 仅调试构造函数,不在发布模式下编译
- c - 如何用 goto 翻译 if .. else 语句?
- c++ - 如何使用 .sdf 文件修复 RDkit 中的“OSError:文件错误:输入文件错误”?
- xml - 在 XSLT 上将名称标记为文本和表格标签重复