Python嵌套for循环构建2D数组时打印列全为相同日期问题
问题根因
你的代码出现全相同日期的核心原因是循环逻辑错误:每次匹配到符合条件的记录时,会遍历所有行索引j,将同一个日期赋值给当前列的全部70行,最终所有行都会被最后一次匹配到的日期覆盖,自然输出结果全部相同。
另外代码存在笔误:你定义的列数变量为cols,但循环中写的是range(col),运行时会直接触发变量未定义报错。
修复方案
调整逻辑为:为每一列单独维护写入行计数器,匹配到对应列的有效记录时,按顺序写入行位置即可,同时移除冗余嵌套循环提升执行效率。
修复后代码如下:
import numpy as np cols = 196 rows = 70 databb = np.zeros((rows, cols)) # 记录每一列下一个可写入的行索引 row_counters = np.zeros(cols, dtype=int) for l in range(len(status)): # 先判断当前记录是否符合筛选条件 if status[l] == 'C' and how[l] == 'epoch': # 计算当前记录对应的列索引 col_idx = obj[l] - 201 # 校验列索引合法、且当前列未写满 if 0 <= col_idx < cols and row_counters[col_idx] < rows: databb[row_counters[col_idx], col_idx] = date[l] # 写入完成后当前列的行索引向后移动一位 row_counters[col_idx] += 1 print(databb[:,0])
补充说明
- 移除了原有冗余的两层嵌套循环,单循环遍历原始记录即可,执行效率大幅提升
- 新增边界校验逻辑,避免obj值超出定义的列范围、或者列写满后出现数组越界报错
- 如果某列符合条件的记录不足70条,未写入的位置会保留初始的0值,你可以根据需要后续替换为NaN或者其他默认值
内容的提问来源于stack exchange,提问作者maren551
相关产品推荐
相关产品推荐

