如何在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
相关产品推荐
相关产品推荐

