Python中对二维数组应用函数后如何保留原二维结构
问题原因
你当前的代码逻辑是直接将所有处理后的元素逐个追加到同一个一维列表中,没有按照原数组的行结构做分层存储,因此最终输出会被打平为一维列表。另外你内层循环写死了len(Vamos[1])作为遍历长度,如果遇到各行长度不一致的不规则二维数组,还会触发索引越界或者元素遗漏的问题。
解决方案
方法1:修正原生循环逻辑
外层遍历每一行时,先初始化一个临时列表存储当前行的处理结果,等当前行所有元素处理完成后,再把整行结果追加到最终输出列表中,即可保留原二维结构:
Vamos = [ [2, 4, 5, 6], [6, 5, 99,100], [849, 33, 7, 7] ] Vamos1 = [] for row in Vamos: current_row_res = [] for item in row: current_row_res.append(item + 99) Vamos1.append(current_row_res)
运行后得到的Vamos1结构和原数组完全一致,输出为:[[101, 103, 104, 105], [105, 104, 198, 199], [948, 132, 106, 106]]
方法2:列表推导式(更简洁的Pythonic写法)
用嵌套列表推导式可以用更短的代码实现相同效果,不需要手动维护临时行列表:
Vamos = [ [2, 4, 5, 6], [6, 5, 99,100], [849, 33, 7, 7] ] Vamos1 = [[item + 99 for item in row] for row in Vamos]
提示:两种写法都直接遍历行对象、再遍历行内元素,不需要手动取索引写
range(len()),天然适配不规则二维数组,不会出现索引相关的错误。
内容的提问来源于stack exchange,提问作者Pedro Gomes
相关产品推荐
相关产品推荐

