You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:57:05