python - 编译列表 : python best practice

标签 python python-3.x list append

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

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

我想知道最佳实践是什么。还有另一种写法吗?是否可以用一行来描述列表,而不是像这样:

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

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

谢谢!

编辑:代码中的错字!

最佳答案

从 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]

关于python - 编译列表 : python best practice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54718090/

相关文章:

python - django 对于联系我们网站来说是不是太过分了?

python - 将图像从笛卡尔坐标转换为极坐标 - 肢体变暗

python - Print 和 file.write 给出不同的输出,Python

javascript - 如何: Print Select Option Values?

java - 如何从 OpenERP 调用 xml-RPC 到 JavaServer?

python - 从python中的当前日期获取7天前的日期

c# - 动态和不可变的 UIElement 数组

python - 为什么将一个变量设置为等于另一个变量会改变此代码中的任何内容?

python - 如何增加使用 'timeout' 命令运行的进程的超时限制

python-3.x - Google 使用 selenium 搜索下一页