Python3从用户好友关系列表构建网络出现TypeError报错如何解决
问题原因分析
- 直接报错原因:循环变量使用错误。
for j in network遍历得到的j是network的元素(如['0','1']这类列表),不是下标索引,因此network[j]会触发类型错误。同理for k in secondary得到的k是子列表对象,不能作为secondary[k]的索引值使用。 - 隐藏逻辑错误:列表初始化方式存在浅拷贝问题。
secondary = [[]] * (len(lines)//2)会生成多个指向同一个空列表的引用,后续往任意子列表添加元素时所有子列表都会同步更新,完全不符合预期。 - 设计缺陷:用户ID不一定是连续的(比如示例中的ID 8),用列表按索引存储会浪费空间且处理逻辑复杂,用字典映射用户ID到好友列表更适配需求。
正确实现代码
friend_map = {} # 如果你的lines第一行是表头,可调整为 for line in lines[1:] for line in lines: # 清理每行末尾的逗号、换行符,拆分两个用户ID并转成整数 u1, u2 = map(int, line.strip().rstrip(',').split()) # 双向添加好友关系 if u1 not in friend_map: friend_map[u1] = [] friend_map[u1].append(u2) if u2 not in friend_map: friend_map[u2] = [] friend_map[u2].append(u1) # 转换为按用户ID升序排列的元组列表,好友列表也同步做升序处理 result = sorted([(uid, sorted(friends)) for uid, friends in friend_map.items()]) print(result)
效果验证
示例输入运行后输出为:
[(0, [1]), (1, [0, 2, 8]), (2, [1, 3]), (3, [2]), (8, [1])]
完全匹配需求的输出格式。
内容的提问来源于stack exchange,提问作者heyhoezay
相关产品推荐
相关产品推荐

