我经常在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
甚至更好:在类似情况下,我是否总是必须使用循环来创建列表,还是经常有一种方法可以在一行中制作所需的列表?
谢谢!
编辑:代码中有错字!
答案 0 :(得分: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]