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

Python自定义linked_list for遍历报不可迭代TypeError问题

报错原因

Python中for循环只能遍历可迭代对象,你的自定义linked_list类没有实现Python可迭代协议要求的对应方法,解释器无法按顺序获取链表中的元素,因此抛出类型错误。
要让自定义类支持for循环遍历,只需要满足可迭代协议的任意一条规则即可:

  • 实现__iter__()方法,返回一个带__next__()方法的迭代器对象,遍历完成时抛出StopIteration异常
  • 实现__getitem__()方法,支持从0开始的整数索引取值,索引超出范围时抛出IndexError
修复方法

针对链表的链式结构,最高效、代码最简洁的实现方式是在linked_list类中添加__iter__()方法,用生成器实现迭代逻辑,不需要额外编写迭代器类:

def __iter__(self):
    # 跳过初始化时创建的空哨兵头节点,从第一个存储有效数据的节点开始遍历
    current_node = self.head.next
    while current_node is not None:
        yield current_node.data
        current_node = current_node.next

添加该方法后,不仅可以直接用for循环遍历链表实例,所有支持可迭代对象的内置操作(比如转列表、元组、求和等)都可以正常使用:

# 测试代码
my_list = linked_list()
my_list.append("a")
my_list.append("b")
my_list.append("c")

# for循环遍历
for val in my_list:
    print(val)

# 直接转列表
print(list(my_list)) # 输出 ['a', 'b', 'c']

补充说明:如果选择实现__getitem__()方法也能达到支持遍历的效果,但链表不支持随机访问,每次按索引取值都需要从头节点开始遍历,整体遍历性能远低于上述生成器实现的__iter__方案,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:06:28