2016-03-15 67 views
0

我写了一个函数,创建一个任意深度的空嵌套列表。它有一个外部函数和一个内部函数,但我不太确定是否真的需要使用内部函数。有没有一种内部函数重构或重写它的方法?或者甚至有可能使用for循环?Python:初始化列表清单...等

def nested_list(depth): 
    def inner(my_list): 
     if len(my_list) == 1: return[my_list[0]] 
     return [inner(my_list[1:])] 
    return inner([[] for x in range(depth)]) 

感谢,

回答

4

如果你打算为最短的代码可能,递归可以使它更短。

def nested_list(depth): 
    return [nested_list(depth - 1)] if depth else [] 

一个不需要循环或递归更酷的方法与reduce()功能:

def nested_list(depth): 
    reduce(lambda l, n: [l], xrange(depth), []) 

对于Python 3:

import functools 
def nested_list(depth): 
    functools.reduce(lambda l, n: [l], range(depth), []) 
+0

在python 3中'reduce'被移至'functools.reduce'。确实很酷@kichik – tdelaney

+0

。 –

+0

我发现递归解决方案不仅是最短的一个,而且是最清晰的一个! – Claudiu

2

如果你想for循环,您可以使用:

def nested_list(depth): 
    x=[] 
    if depth==0: 
     return x 
    for i in range(depth): 
     x=[x] 
    return x 
+0

你不需要'如果depth == 0'部分,'for'循环在这种情况下迭代零次。 – tdelaney