2016-03-15 65 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