如何获取 python 深度的所有数组元素?

How to get all array elements at depth in python?

我正在尝试制作一个函数,它接受一个数组,returns 数组按深度排序:

sortArrDepth([1, [5, 6], [4, 67, [34]], 7])

会return

[[1, 7], [5, 6, 4, 67], [34]]

但是,它必须能够处理任何最大深度的数组,我宁愿不使用任何外部模块。如果有帮助,这里有一个获取最大深度的函数:

def getAstDepth(ast):
    depth = 0
    for i in last:
        if isinstance(i, list):
            depth = max(getAstDepth(i), depth)
    return depth

感谢任何帮助!

这是使用递归函数的一种方法:

def sortArrDepth(l, out=[], depth=0):
    if len(out)<=depth:
        out += [[] for _ in range(depth-len(out)+1)]
    for v in l:
        if isinstance(v, list):
            sortArrDepth(v, out=out, depth=depth+1)
        else:
            out[depth].append(v)
    return out

示例:

>>> sortArrDepth([1, [5, 6], [4, 67, [34]], 7])
[[1, 7], [5, 6, 4, 67], [34]]

>>> sortArrDepth([1, [5, 6], [[[0]]], [4, 67, [34]], 7])
[[1, 7], [5, 6, 4, 67], [34], [0]]

您可以使用 itertools.zip_longest 和递归来获得更深的层次:

from itertools import zip_longest
def sort_by_depth(seq):
    first = [item for item in seq if not isinstance(item, list)]
    nested = [sort_by_depth(item) for item in seq if isinstance(item, list)]
    return [first] + [sum(item, start=[]) for item in zip_longest(*nested, fillvalue=[])]