python - LinkedList 对象不可迭代 - Python - “LinkedList”对象不可迭代
问题描述
class Node():
def __init__(self, val, next=None):
self.val = val
self.next = next
def __str__(self):
return self.val
class LinkedList():
def __init__(self):
self.head = None
def __repr__(self):
node = self.head
nodes = []
while node is not None:
nodes.append(node.val)
node = node.next
nodes.append("None")
return "->".join(nodes)
def add_first(self, node):
if not self.head:
self.head = node
else:
node.next = head
self.head = node
def add_last(self, node):
if not self.head:
self.head = node
return
else:
curr = self.head
while curr.next != None:
curr = curr.next
curr.next = node
def add_before(self, target_data, node):
if self.head.val == target_data:
node.next = head
self.head = node
else:
prev_node = self.head
for node in self:
if node.val == target_data:
prev_node.next = new_node
new_node.next = node
return
prev_node = node
if __name__ == "__main__":
llist = LinkedList()
first = Node('a')
llist.head = first
second = Node('b')
first.next = second
third = Node('c')
print(llist)
llist.add_last(third)
print(llist)
llist.add_before("b", Node('d'))
print(llist)
错误:对于自身中的节点:TypeError:'LinkedList' 对象不可迭代
有人可以帮我理解这个问题以及如何解决它吗?试图理解和解决问题
解决方案
这是违规行:
for node in self:
这会尝试迭代对象实例,但您尚未为 LinkedList 类定义此行为。
Python 中的所有可迭代对象都必须__iter__()
定义方法。Python wiki 对此有更多详细信息,以及可迭代和迭代器之间的区别。
如果您确实需要此 LinkedList 类的此行为,则应__iter__()
使用适当的逻辑实现该方法。
推荐阅读
- css - 如何定位子元素的相邻兄弟元素?
- unity3d - 在任何其他 AR 库中是否有类似于 ARCore 的锚点和姿势的东西
- istio - 解码 JWT 并将“sub”放入请求标头中
- c# - MSI 卸载失败
- visual-studio - 在发布期间如何使用环境变量和 appSettings 文件?
- video - mp4 视频旋转元数据删除
- python - 张量流概率错误:AttributeError:模块'tensorflow_probability'没有属性'distributions'
- go - Golang libphonenumber
- android - 任务':app:preDebugBuild'的Flutter-Execution失败
- asp.net - 在某些子域之间共享 Cookie