首页 > 解决方案 > 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' 对象不可迭代

有人可以帮我理解这个问题以及如何解决它吗?试图理解和解决问题

标签: pythonlinked-list

解决方案


这是违规行:

for node in self:

这会尝试迭代对象实例,但您尚未为 LinkedList 类定义此行为。

Python 中的所有可迭代对象都必须__iter__()定义方法。Python wiki 对此有更多详细信息,以及可迭代和迭代器之间的区别。

如果您确实需要此 LinkedList 类的此行为,则应__iter__()使用适当的逻辑实现该方法。


推荐阅读