(可能是最方便的方法)如何在Python中定义一个多维列表

话不多说,直接上代码:

# C风格生成任意维度的列表
def array(*d):
    return [array(*d[1:]) for _ in range(d[0])] if d else 0

效果如下:

这样,我们不需要列表生成式也能快捷地生成多维数组。并且对于高维数组,更不需臃肿的多层列表生成式。这种麻烦的工作我们交给递归就好啦(*╹▽╹*)

P.S. 解释一下原理。首先函数的形参是可变长参数,这样就可以接受多个维度的大小(先假设传入n个整数参数p1,p2,p3...pn,那么就是n维列表,相当于调用array(p1,p2,p3...pn))。然后函数会先判断if d(元组d是否不为空)如果满足(代表着本次调用还有参数(至少有一个p),因为每次递归都会少一个参数(参数个数:n→n-1)),那么直接进入下一层递归。而下一层递归将原函数第二个参数及以后的所有参数都解包,让其生成p2,p3...pn的参数序列,这样就会调用array(p2,p3...pn),然后生成p1次(也就是生成p1个“p2,p3...pn”维度的多维列表),这刚好符合多维列表的递归定义:每个元素又是一个多维列表(最后一维除外);如果不满足代表着本次调用没有参数(d是个空元组),这说明此时(最后一层递归,要生成0维的元素了)应该是最后一维的每个元素的生成。这时执行else 0(生成元素0,也可以改成其他的值,作为列表元素的初始化值),然后返回到上一层(上一层是生成pn个array(()),array(())即生成单个的0维元素)。接下来不断向上返回,直至返回到最顶层,再返回给调用处,return的就是一个满足要求的n维列表了~~

至此,这篇关于如何在Python中定义一个多维列表的教程就结束了。如果大家仍有疑问,欢迎在评论区积极留言或者小窗私信~~

猜你喜欢

转载自blog.csdn.net/ik666/article/details/127912220