如何在Python中定义Jagged array(锯齿数组)?
Python 中实现锯齿数组的方法
Python 原生支持锯齿数组(也就是各行长度不一致的多维嵌套序列),不需要安装任何第三方库,靠的就是Python列表动态可变、没有固定长度限制的特性。
你贴的C#锯齿数组定义逻辑,在Python里可以直接对应实现:
和C#逻辑对齐的分步写法
原C#代码是先声明含3个元素的外层数组,再分别初始化长度为5、4、2的内层数组,Python等价写法如下:
# 先初始化长度为3的外层列表,用None占位 jagged_array = [None] * 3 # 逐行给不同长度的内层列表赋值,这里默认填充0 jagged_array[0] = [0] * 5 jagged_array[1] = [0] * 4 jagged_array[2] = [0] * 2
运行后打印jagged_array就能得到结构[[0, 0, 0, 0, 0], [0, 0, 0, 0], [0, 0]],完全符合锯齿数组的结构要求。
日常更常用的简洁写法
实际写代码没必要分步初始化,直接一次性定义整个数组就行,元素值可以按需自定义:
jagged_array = [ [1, 2, 3, 4, 5], # 第一行长度5 [6, 7, 8, 9], # 第二行长度4 [10, 11] # 第三行长度2 ]
如果要批量生成指定行长度、统一填充值的锯齿数组,推荐用列表推导式,能避开引用复用的坑:
# 按照5、4、2的行长度要求,生成全0填充的锯齿数组 jagged_array = [ [0] * row_len for row_len in (5, 4, 2) ]
避坑提醒:别用
[[0]*5]*3这类连续乘法的写法批量生成嵌套列表,这种写法下所有内层列表会指向同一个内存地址,修改任意一行的元素,其他行对应位置的值也会同步被改动。
内容的提问来源于stack exchange,提问作者shamim-shzd
相关产品推荐
相关产品推荐

