我经常在 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/