Python,理解列表理解

时间:2017-02-26 19:47:47

标签: python-3.x list-comprehension

我正在学习数据结构,我想把堆栈中的数据放到一个列表中,我用这个代码做了

data_list=[Stack1.pop() for data in range(Stack1.get_top()+1)]

现在这确实实现了它。但我想知道

  • 即使变量'数据'没有在表达式中使用' Stack1.pop()' ,理解是有效的。请解释它正在使用一个示例,其中变量未在表达式中使用。

  • 这种方法是否很好w.r.to stack,queue?

1 个答案:

答案 0 :(得分:1)

与任何列表理解一样,您可以将代码修改为具有重复for次调用的等效append循环:

data_list = []
for _ in range(Stack1.get_top()+1):
    data_list.append(Stack1.pop())

代码有效(我假设),因为get_top返回的值小于堆栈的大小。但它确实有副作用,清空堆栈,这可能是也可能不是你想要的。

使用堆栈中的项目更自然的方法是使用while循环:

while not some_stack.is_empty():
    item = stack.pop()
    do_something(item)

while循环的优点是,如果do_something修改堆栈(通过推送新值或弹出其他值),它仍然有效。

最后一点:在Python中通常不需要使用特殊的堆栈类型。列表从列表末尾到O(1)append()都有pop()个方法。如果您希望列表中的项目按照他们pop的顺序排列,您可以使用list.reverse()方法(反向调整)来反转它,reversed内置函数(获取反向迭代器),或者外星人的笑脸" slice(some_list[::-1];获取列表的反向副本。)