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

Python中类对象数组赋值时全部索引被覆盖的问题求助

问题根源

你所有索引被覆盖的核心原因是:全程复用同一个work类实例。列表daylist里的每个元素都是指向这个唯一对象的引用,每次循环修改work的属性时,所有引用该对象的列表元素都会同步更新,最终所有索引都会显示最后一次修改的属性值。

修复方案

每次处理新的日期和PPV数据时,创建一个全新的work类实例,确保每组数据对应独立的对象,而非复用同一个引用。

修改后的代码示例

# 先定义你的Work类(假设你之前的类结构如下)
class Work:
    def __init__(self):
        self.date = ""
        self.lpv = 0.0
        self.tpv = 0.0
        self.vpv = 0.0

count = 0
daylist = []  # 推荐用append动态添加,避免预先初始化的长度问题

for line in modified:
    if line.startswith('Date'):
        # 遇到新日期时,创建新的Work实例
        work = Work()
        output.append(line)
        list2 = line.split(' ')
        work.date = list2[1]
    if line.startswith('PPV'):
        output.append(line)
        list1 = line.split(' ')
        # 将字符串转为浮点数,符合你存储浮点数的需求
        work.lpv = float(list1[2])
        work.tpv = float(list1[3])
        work.vpv = float(list1[4])
        # 将新实例存入列表
        daylist.append(work)
        # 如果是预先固定长度的列表,替换为 daylist[count] = work
        print(count, daylist[count].date)
        count += 1

关键说明

  • 每次触发Date行时,新建Work实例,保证后续PPV数据绑定到独立对象上。
  • 把list1中的字符串转为浮点数,匹配你“类对象包含字符串和若干浮点数”的需求。
  • 用append管理列表更灵活,若必须用预先初始化的列表,直接赋值daylist[count] = work即可,核心是每次赋值的都是新实例。

内容的提问来源于stack exchange,提问作者ian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:45:45