我正在学习数据结构,我想把堆栈中的数据放到一个列表中,我用这个代码做了
data_list=[Stack1.pop() for data in range(Stack1.get_top()+1)]
现在这确实实现了它。但我想知道
即使变量'数据'没有在表达式中使用' Stack1.pop()' ,理解是有效的。请解释它正在使用一个示例,其中变量未在表达式中使用。
这种方法是否很好w.r.to stack,queue?
答案 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]
;获取列表的反向副本。)