Python语法疑问:如何用紧凑嵌套循环实现顺序填充二维数组
用简洁嵌套语法实现递增二维数组生成
原函数crescentOrderArray1的功能是生成一个rows行columns列的二维数组,元素从1开始逐行逐列依次递增。
你尝试的crescentOrderArray2存在两个问题:
- 嵌套推导式内层误用了
range(rows),应该对应列数range(columns) - 直接引用
count无法实现递增,推导式不会在迭代过程中修改外部变量的取值,所有元素都会是初始的1
下面提供两种符合你需求的简洁实现方式:
方式一:用迭代器维护递增计数
利用Python的迭代器特性,让计数自动递增:
def crescentOrderArray(rows, columns): count = iter(range(1, rows * columns + 1)) return [[next(count) for _ in range(columns)] for _ in range(rows)]
原理:先创建一个从1到rows*columns的迭代器,每行推导式中调用next(count)取出下一个递增的数值,刚好填满一行的columns个元素。
方式二:用数学公式直接计算元素值
不需要额外变量,通过行列索引直接算出对应位置的数值:
def crescentOrderArray(rows, columns): return [[row * columns + col + 1 for col in range(columns)] for row in range(rows)]
原理:第row行(索引从0开始)的起始值是row*columns +1,每列col(索引从0开始)的数值就是起始值加上列索引,直接通过数学关系推导,代码更紧凑。
两种方式的输出结果和原函数完全一致,比如调用crescentOrderArray(3,4)会返回:
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
内容的提问来源于stack exchange,提问作者Joao Pedro Barbosa Madeira
相关产品推荐
相关产品推荐

