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

如何为Python双向链表实现列表推导式与for-in循环支持

让Python双向链表支持for-in循环与列表推导

核心思路

要让自定义类支持迭代操作(包括for-in循环、列表推导),只需实现Python迭代协议中的__iter__()方法,该方法需返回一个迭代器对象。最简洁的实现方式是用生成器函数来完成。

完整实现代码

基础双向链表结构(含迭代支持)

class Node:
    def __init__(self, data):
        self.data = data
        self.prev = None
        self.next = None

class DoublyLinkedList:
    def __init__(self):
        self.head = None
        self.tail = None

    def add(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            self.tail = new_node
        else:
            self.tail.next = new_node
            new_node.prev = self.tail
            self.tail = new_node

    # 实现迭代协议核心方法
    def __iter__(self):
        current = self.head
        while current:
            yield current.data
            current = current.next

测试验证

# 初始化链表并添加元素
dll = DoublyLinkedList()
for num in [10, 20, 30, 40]:
    dll.add(num)

# 测试for-in循环遍历
print("for-in循环遍历结果:")
for item in dll:
    print(item)

# 测试列表推导转换
doubled_list = [x * 2 for x in dll]
print("\n列表推导转换结果:", doubled_list)

预期输出

for-in循环遍历结果:
10
20
30
40

列表推导转换结果: [20, 40, 60, 80]

关键说明

  • __iter__()方法是迭代协议的入口,Python在执行for-in或列表推导时会自动调用该方法。
  • 生成器通过yield关键字逐个返回元素,当current指向None(链表末尾)时,生成器自动抛出StopIteration异常,Python捕获后终止迭代。
  • 该实现无需额外定义独立的迭代器类,代码简洁且符合Python惯用写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:33:22