python - 如何在 Python 中“堆叠”嵌套列表?
问题描述
如何重塑嵌套列表,以便所有嵌套项目都嵌套在之前的项目中?
例如
ex1 = [1, [2, 20], [3, 30], [4]]
ex2 = [1, [2]]
ex3 = [1]
预期的输出将是这样的:
ex1 = [1, [2, 20, [3, 30, [4]]]]
ex2 = [1, [2]]
ex3 = [1]
我想我正在寻找与扁平化列表相反的事情。
原始列表结构可以嵌套任意长度的对象,但这些嵌套对象本身永远不会包含嵌套对象。
也可能存在零个嵌套对象。
编辑:我已修复的示例中的错误(我认为)
编辑2:一些重要的澄清错过了,现在添加
解决方案
只要列表长于 2,大概它会包含我们需要堆叠的子列表,所以弹出最后一个并堆叠它。
def stack(L):
"""Note: Mutates L"""
while len(L) > 2:
last = L.pop()
L[-1].append(last)
>>> stack(ex1)
>>> ex1
[1, [2, 20, [3, 30, [4]]]]
>>> stack(ex2)
>>> ex2
[1, [2]]
>>> stack(ex3)
>>> ex3
[1]
原始解决方案 - 更复杂
沿着列表向后迭代,将每个子列表附加到它之前的子列表,然后将其从顶级列表中删除。虽然,如果顶级列表的元素少于 3 个,它可能已经是正确的。
def stack(L):
"""Note: Mutates L"""
if len(L) < 3:
return
prev = L[-1] # For use in loop
for sublist in L[-2:0:-1]: # Backwards from second-last to second
sublist.append(prev)
del L[-1]
prev = sublist # For next iteration
推荐阅读
- c# - Roslyn 是 Visual Studio 2017 的默认编译器吗
- c - 使用 mpicc 编译非 mpi 库
- r - 通过分配 LCC 投影将矩阵转换为栅格
- python - 从 python2.6.6 版本的位置导入熊猫
- node.js - 如何在使用 validator.js 检查 .isAlpha 时包含许多语言环境
- java - 我正在尝试按日期过滤文件
- java - 在哈希图中获取属于一个对象的所有键
- c# - 为什么 Task.Delay 会破坏线程的 STA 状态?
- javascript - 选择一组特定的 JSON 数据 onClick
- javascript - JavaScript 数组未使用 Ajax 发布到 PHP 文件