Python中向现有列表追加元素创建嵌套列表及报错解决
问题分析与解决
报错原因
你遇到的AttributeError: 'str' object has no attribute 'append'是因为address_list中的元素是字符串类型(比如初始添加的address是字符串),而字符串没有append方法,无法直接向其添加元素。要实现你需要的嵌套结构,必须将address_list的每个元素设计为包含原地址和对应子列表的列表,格式为[原地址字符串, [关联子元素列表]]。
修改后的完整代码
address_list = [] temp_list = [] G = nx.Graph() # 初始化:将地址包装为[原地址, 空的子列表]结构 address_list.append([address, []]) # 添加根节点(取列表中的第一个元素,即原地址字符串) G.add_node(address_list[0][0]) for i in range(len(address_list)): # 打印原地址,取列表的第一个元素 print(address_list[i][0]) if i == target: tracePath(address, address_list[i][0]) # 传入原地址进行查询,取列表的第一个元素 txQuery(address_list[i][0]) parser() # 读取文件到temp_list file_path_simple = r'Z:\[path_redacted]\tx_list_simple.txt' with open(file_path_simple, 'r') as fp: for ln in fp: ln = ln.strip('\n') temp_list.append(ln) # with语句会自动关闭文件,不需要手动fp.close() # 将temp_list的内容赋值给当前元素的子列表(注意拷贝,避免后续clear影响) address_list[i][1] = temp_list.copy() # 创建子节点与边,遍历当前元素的子列表(address_list[i][1]) # 注意:这里不要用i作为循环变量,会覆盖外层的i,改用addr for addr in address_list[i][1]: G.add_node(addr) G.add_edge(address_list[i][0], addr) # 新添加的地址也要包装为[地址, 空子列表]的结构 address_list.append([addr, []]) temp_list.clear()
关键修改点
- 初始化结构:将
address_list.append(address)改为address_list.append([address, []]),让每个元素都是[原地址, 子列表]的嵌套结构。 - 访问原地址:所有需要使用原地址的地方(如
txQuery、print、add_node),都要从列表中取出第一个元素,即address_list[i][0]。 - 赋值子列表:直接将
temp_list的内容拷贝到当前元素的子列表address_list[i][1],不需要手动循环append,使用copy()避免后续temp_list.clear()影响已存储的子列表。 - 避免变量冲突:内层循环变量不要用
i,改用addr,防止覆盖外层循环的索引变量。 - 自动关闭文件:
with语句会自动处理文件关闭,不需要手动调用fp.close()。
最终结构说明
修改后address_list的结构会符合你的需求:
address_list[0] = [原根地址, [1,2,3]] address_list[1] = [地址1, [1,5,6,7,8,35]] address_list[2] = [地址2, [3,543,34,84,3,8,53]]
内容的提问来源于stack exchange,提问作者user2334659
相关产品推荐
相关产品推荐

