如何在 Python 中对许多嵌套列表中的项目执行函数

how to execute a function on items in many nested lists in python

提问人:eth 提问时间:11/17/2022 最后编辑:eth 更新时间:11/17/2022 访问量:53

问:

我想在 python 中遍历大量嵌套列表,并以递归方式树化到其他列表中。列表将采用常规格式。例如,我想在不展平大列表的情况下制作另一个嵌套列表。[[1, [2, [3, [4, 5]]]], [7, [8, [9, [10, 11]]]]]

预期输出:[[1, [2, [3, [4, [5, x]]]]], [7, [8, [9, [10, [11, y]]]]]]

我尝试了函数递归,并制作了函数 getChildren():

def getChildren(list):
    for item in list:
        item = [item, item + 1]
    return list

我相信我离得很近。我想这样做很多次,直到“底部”的值。 到目前为止,这是我的代码:

while True:
    layer = []
    for item in list: 
        item = getChildren(item)
        layer.append(item)
    list.append(layer)

但它并没有按预期工作。有什么帮助吗?

python 列表 递归 nested-loops 嵌套列表

评论

1赞 Claudio 11/17/2022
你明白什么是递归吗?您不是从内部调用函数本身......
0赞 eth 11/17/2022
是的,但我不知道如何实现它。我尝试了许多带有递归的代码段,但无法弄清楚,我将尝试将它们添加到帖子中
0赞 Stef 11/17/2022
我强烈建议永远不要在 python 中命名变量。 是用于生成所有列表的内置类的名称。如果你通过将这个名字用于一个特定的变量来掩盖它,就会发生奇怪的事情。以下是 python 中要避免的内置名称列表: docs.python.org/3/library/functions.htmllistlistlist

答:

0赞 Claudio 11/17/2022 #1

尝试:

L = [[1, [2, [3, [4, 5]]]], [7, [8, [9, [10, 11]]]]]

def getChildren(L):
    for indx, value in enumerate(L):
        if isinstance(value, list):
            getChildren(value)
        else:
            L[indx] = [value, value + 1]

getChildren(L)
print(L)

给:

[[[1, 2], [[2, 3], [[3, 4], [[4, 5], [5, 6]]]]], [[7, 8], [[8, 9], [[9, 10], [[10, 11], [11, 12]]]]]]

L = [[1, [2, [3, [4, 5]]]], [7, [8, [9, [10, 11]]]]]
def getChildren(L):
    if isinstance(L[1], list): 
        getChildren(L[1])
    else:
        L[1] = [ L[1], L[1]+1 ]
getChildren(L[0])
getChildren(L[1])
print(L)

这给了:

[[1, [2, [3, [4, [5, 6]]]]], [7, [8, [9, [10, [11, 12]]]]]]
[[1, [2, [3, [4, [5, [6, 7]]]]]], [7, [8, [9, [10, [11, [12, 13]]]]]]]
[[1, [2, [3, [4, [5, [6, [7, 8]]]]]]], [7, [8, [9, [10, [11, [12, [13, 14]]]]]]]]