编译列表:python最佳实践

问题描述 投票:1回答:1

我经常在python 3中一次编译一个元素列表;比方说,我通过浏览带有第一个元素头的链表来制作一个列表:

l = []
while head:
    l.append(head.val)
    head = head.next

我想知道最佳做法是什么。还有另一种写作方式吗?是否可以在一行中描述列表,而不是这样:

while head:
    l = # something creating the list AND appending elements
    head = head.next

更好的是:我是否总是必须使用循环来创建类似情况下的列表,或者是否经常有方法在一行中创建所需的列表?

谢谢!

编辑:代码中的拼写错误!

python python-3.x list append
1个回答
4
投票

从OOP的角度来看,最佳实践是依靠Python的__iter__方法将迭代转换为list

我假设您的链接列表class看起来有点像这样。

class LinkedList:
    def __init__(self, value, nxt=None):
        self.value = value
        self.next = nxt

要允许在链表上进行迭代,可以定义__iter__

class LinkedList:
    def __init__(self, value, nxt=None):
        self.value = value
        self.next = nxt

    def __iter__(self):
        while self:
            yield self.value
            self = self.next

然后你可以让list处理LinkedList可迭代的演员表。

head = LinkedList(1, LinkedList(2, LinkedList(3)))
lst = list(head) # [1, 2, 3]
© www.soinside.com 2019 - 2024. All rights reserved.