是否可以使用map()或reduce()函数迭代ListNode?

时间:2015-01-16 06:19:07

标签: python

我的数据结构如下:

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

我想逐个迭代ListNode,直到下一个是None

我可以使用while,但是可以使用map()或reduce()或其他东西来使代码更漂亮吗?

1 个答案:

答案 0 :(得分:0)

我不认为reduce是适合这项工作的工具。首先,您的ListNode实际上不可迭代,但您可以通过实施__iter__函数来解决此问题:

class ListNode:
    def __init__(self, x, succ=None):
        self.val = x
        self.succ = succ

    def __iter__(self):
        cur = self
        while cur is not None:
            yield cur
            cur = cur.succ

这里,__iter__是一个生成器函数,yield下一个后继者,直到到达列表的末尾。现在,您可以使用常规for循环来迭代链表:

lst = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5)))))
for ln in lst:
    print ln.val