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

如何在Python类中通过构造函数及指定方法创建列表的列表

解决Python类中生成列表的列表问题

你的问题出在每次调用build()和build1()时,都是将单个元素直接追加到一维列表self.add中,所以最终得到的是平铺的一维结果。要生成列表的列表,我们需要把每一组name和loc打包成一个子列表,再将这个子列表追加到主列表里。

下面是修改后的代码,同时保留你要求的build和build1方法:

class Sample:
    def __init__(self):
        self.add = list()
        self.current_group = []  # 新增临时属性,存储当前组的元素

    def build(self, name):
        self.current_group.append(name)  # 将名字加入当前临时组

    def build1(self, loc):
        self.current_group.append(loc)  # 将地点加入当前临时组
        self.add.append(self.current_group)  # 组元素收集完成,将子列表追加到主列表
        self.current_group = []  # 重置临时组,准备接收下一组数据

s = Sample()
a1 = ["mohan,ps","gandhi,as"]
for a in a1:
    split_values = a.split(",")
    s.build(split_values[0])
    s.build1(split_values[1])

print(s.add)

代码逻辑说明:

  • 新增self.current_group临时属性,专门用来暂存每一组的name和loc;
  • build()只负责将名字加入当前组,build1()在加入地点后,直接把完整的子列表追加到主列表,同时重置临时组;
  • 每处理一个a1中的元素,就会生成一个独立的子列表并加入主列表,最终得到你期望的二维列表结构。

运行这段代码后,输出结果为:

[['mohan', 'ps'], ['gandhi', 'as']]

如果你希望build方法承担启动新组的职责,也可以用这个变体实现:

class Sample:
    def __init__(self):
        self.add = list()

    def build(self, name):
        self.current_group = [name]  # 用名字初始化新的子列表

    def build1(self, loc):
        self.current_group.append(loc)
        self.add.append(self.current_group)

s = Sample()
a1 = ["mohan,ps","gandhi,as"]
for a in a1:
    split_values = a.split(",")
    s.build(split_values[0])
    s.build1(split_values[1])

print(s.add)

两种写法的核心逻辑一致:先把每组的两个元素打包成子列表,再将子列表加入主列表,而不是直接把单个元素挨个追加到主列表中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:15:21