如何获取 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=[])]
我正在尝试制作一个函数,它接受一个数组,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=[])]