gpt4 book ai didi

Python:使用列表理解将链表转换为列表?

转载 作者:太空狗 更新时间:2023-10-30 02:51:44 25 4
gpt4 key购买 nike

假设我有一个简单的 链表 实现,它使用名为 child 的字典将一个节点与链表中的下一个节点相关联。

例如:

 a->b->c->d

会是:

 {a:b,b:c,c:d,d:None}

将其转换为普通列表很简单,

myList=[]
node=a
while node!=None:
myList.append(node)
node=child[node]

我正在努力想出任何可以通过列表理解实现的方法。有没有办法?

最佳答案

总结:列表推导式是围绕 for 循环而不是 while 循环设计的,因此这不是一个很好的选择。

需要什么:for 循环需要 iterator用于输入。

备选方案 1: 这可以与列表理解一起使用,但这需要将工作转移到 generator 中。 (这可能不是您所希望的):

>>> child = {'a':'b', 'b': 'c', 'c': 'd', 'd': None}
>>> def ll_iterator(node):
while node != None:
yield node
node = child[node]

>>> [x for x in ll_iterator('a')]
['a', 'b', 'c', 'd']

备选方案 2: 除了生成器,另一种制作迭代器的方法是使用 iter() 的两个参数形式.为此,您需要一个有状态的零参数函数来发出连续的链表节点:

>>> child = {'a':'b', 'b': 'c', 'c': 'd', 'd': None}
>>> def next_ll(state=['a']):
value = state[0]
if value is not None:
state[0] = child[value]
return value

>>> [x for x in iter(next_ll, None)]
['a', 'b', 'c', 'd']

评估:这两种选择都有点恶心,所以没有 list comprehension 会更好.简单直接的代码是最好的:-)

脚注:这个问题很好。不止一个人建议该语言添加 while 循环理解。如果这个建议实现了,Python 3.8 将采用 assignment expressions。也会对您的用例有所帮助。

关于Python:使用列表理解将链表转换为列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54780632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com