Python生成全42值10x10矩阵 列表推导式/原生循环实现求助
10x10矩阵操作实现方案
原生循环实现
核心思路:逐行逐列生成初始全42矩阵,按需求遍历对应位置修改元素,最后全量遍历统计符合条件的元素个数。
# 生成10x10全42矩阵 matrix_loop = [] for i in range(10): row = [] for j in range(10): row.append(42) matrix_loop.append(row) # 对角线元素乘4(位置为i == j) for i in range(10): matrix_loop[i][i] *= 4 # 第7行(从1开始计数,对应索引为6)所有元素除以2 for j in range(10): matrix_loop[6][j] /= 2 # 第1、3列(从1开始计数,对应索引为0、2)所有元素加17 for i in range(10): matrix_loop[i][0] += 17 matrix_loop[i][2] += 17 # 统计数值大于42的元素总个数 count_loop = 0 for row in matrix_loop: for num in row: if num > 42: count_loop += 1
单独单元格执行打印结果:
print(count_loop)
列表推导式实现
核心思路:用嵌套列表推导式简化初始矩阵生成、元素修改的逻辑,用生成器推导式完成统计,减少显式循环嵌套代码量。
# 生成10x10全42矩阵 matrix_comp = [[42 for _ in range(10)] for _ in range(10)] # 对角线元素乘4 matrix_comp = [[num * 4 if i == j else num for j, num in enumerate(row)] for i, row in enumerate(matrix_comp)] # 第7行(对应索引6)所有元素除以2 matrix_comp = [[num / 2 if i == 6 else num for j, num in enumerate(row)] for i, row in enumerate(matrix_comp)] # 第1、3列(对应索引0、2)所有元素加17 matrix_comp = [[num + 17 if j in (0, 2) else num for j, num in enumerate(row)] for i, row in enumerate(matrix_comp)] # 统计数值大于42的元素总个数 count_comp = sum(1 for row in matrix_comp for num in row if num > 42)
单独单元格执行打印结果:
print(count_comp)
Numpy实现参考(供逻辑对照)
import numpy as np # 生成10x10全42矩阵 matrix_np = np.full((10, 10), 42, dtype=np.float64) # 对角线元素乘4 np.fill_diagonal(matrix_np, matrix_np.diagonal() * 4) # 第7行(对应索引6)所有元素除以2 matrix_np[6] /= 2 # 第1、3列(对应索引0、2)所有元素加17 matrix_np[:, [0, 2]] += 17 # 统计数值大于42的元素总个数 count_np = np.sum(matrix_np > 42)
单独单元格执行打印结果:
print(count_np)
提示:使用
timeit做性能测试时,仅保留核心的矩阵生成、修改、统计代码即可,打印逻辑单独放在非计时单元格,避免重复输出干扰性能统计结果。
内容的提问来源于stack exchange,提问作者savhaupt
相关产品推荐
相关产品推荐

