Python:初始化列表...列表等

时间:2016-03-15 00:51:44

标签: python list recursion

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

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)])

谢谢,

2 个答案:

答案 0 :(得分: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), [])

答案 1 :(得分:2)

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

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