嵌套列表上的递归

Recursion on nested list

提问人:Sukrut Shishupal 提问时间:9/23/2022 最后编辑:Sukrut Shishupal 更新时间:9/23/2022 访问量:77

问:

我正在尝试在嵌套列表上使用递归。在这里,我试图获得最内在的元素。

input_list = [1,2,3,4,[5,6,7,[8,9,[10]]]]

list1 = input_list

def sublist1(list, sublist=[]):
    if len(list) == 0: 
        return sublist
    else: 
        sublist.append(list)
        sublist1(list[1:], sublist)
    
        print(sublist)

sublist1(list1)

我得到的输出是这样的:

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

我尝试更改索引,但它没有给我预期的输出 [10]。 任何帮助将不胜感激。

python python-3.x 递归 嵌套列表

评论

0赞 NotAName 9/23/2022
为什么守卫条件是?如果你想要内部元素,那么你应该在长度为 1 时返回。不要用作变量名称if len(list) == 0list
0赞 NotAName 9/23/2022
我不明白你为什么要将子列表附加到现有列表中?
1赞 Erich Kitzmueller 9/23/2022
在这样的结构中可能有多个“最内层”元素,考虑一下。你应该澄清如何处理这样的情况。input_list=[[1,2],[3,4]]

答:

-2赞 Uday Vikram Singh 9/23/2022 #1

打印(list1[-1][-1][-1])

这会让你 [10]

评论

2赞 mkrieger1 9/23/2022
为什么不只是 ?print([10])
1赞 divyang4481 9/23/2022 #2

这将回答您的嵌套旅行

input_list = [1,2,3,4,[5,6,7,[8,9,[10]]]]

list1 = input_list

def sublist1(list):
    if(len(list) > 1):
        for l in list:
            #print(l)
           # print(type(l))
            if type(l) == type([]) :
               return sublist1(l)
            else:
                continue
    
    return list        
        


print(sublist1(list1))

评论

0赞 Sukrut Shishupal 9/23/2022
我可以看到我在逻辑上犯了错误的地方。谢谢!!
0赞 blhsing 9/23/2022
为什么不避免覆盖内置函数,而是使用一个 convoled 来获取原始函数?listtype([])list
0赞 divyang4481 9/23/2022
无需检查列表类型的继承,因此请简单化。
0赞 blhsing 9/23/2022
那不是我的重点。我的观点是,即使您仍然需要内置变量,您也可以使用局部变量覆盖内置变量,然后您需要使用可读性较低的 .不要一开始就覆盖内置列表。将局部变量命名为其他名称。listlisttype([])
2赞 blhsing 9/23/2022 #3

仅当当前给定列表中的任何项是列表时,才能进行递归调用;否则,这意味着当前列表已经是最里面的列表,因此您可以按原样返回列表:

def inner_most(lst):
    for i in lst:
        if isinstance(i, list):
            return inner_most(i)
    return lst

input_list = [1,2,3,4,[5,6,7,[8,9,[10]]]]    
print(inner_most(input_list))

这输出:

[10]

演示:https://replit.com/@blhsing/SwelteringFlakyDividend