首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python for循环迭代未完成,正在跳过步骤

Python for循环迭代未完成,正在跳过步骤
EN

Stack Overflow用户
提问于 2020-08-02 12:14:05
回答 1查看 21关注 0票数 0

我在我的"queue from stack“算法中得到了一个”错误的答案“错误,而我希望它能工作。对于那些不熟悉该算法的人,该解决方案需要两个列表类型的堆栈-“推栈”和“弹出栈”,这实际上是一个队列缓冲区,当队列堆栈被调用时,推栈将自己转储到队列缓冲区中,并且队列栈是空的。看看您是否能确定发生了什么以及问题出在哪里。

代码语言:javascript
运行
复制
def pop(self):
    self.stack_to_push_to= [1,2] # sample hard coding
    self.queue_to_pop = [] # sample hard coding

    if self.queue_to_pop == 0: # trigger a dump to form a new queue buffer
        for _ in stack_to_push_to:
            self.queue_to_pop.append(self.stack_to_push_to.pop())
    print(self.queue_to_pop) # [2] but expected [2,1]
EN

回答 1

Stack Overflow用户

发布于 2020-08-02 12:14:05

在附加行上做了太多的工作,虽然看起来很聪明和简洁。当从当前正在迭代的iterable中弹出一个时,它混淆了count和python迭代器过程,或者这就是我猜测发生的事情。类似的事情也会发生在excel中,当你删除行的同时向下遍历它们(不是向上遍历它们)。我只是假设Python应该能够以某种方式自己处理这件事。

有问题的代码。

代码语言:javascript
运行
复制
if self.queue_to_pop == 0: # trigger a dump to form a new sub-queue
    for _ in stack_to_push_to:
        self.queue_to_pop.append(self.stack_incoming.pop()) #!!!!!!

pop方法服务于自动向后工作的好处,这是我想要的,我也认为它可以节省时间和空间复杂性,但它最终不起作用,我找到了两个可以做到的替代方案。我有兴趣了解是否有一种方法可以降低我的解决方案的复杂性。

选项1:

代码语言:javascript
运行
复制
    for i in range(len(self.stack_to_push_to)-1,-1,-1):
        self.queue_buffer.append(self.stack_to_push_to[i])
    self.stack_to_push_to = []

选项2:

代码语言:javascript
运行
复制
    for _ in reversed(self.stack_to_push_to):
        self.queue_buffer.append(_)
    self.stack_to_push_to = []

我没有看到其他人发布这个问题,所以我认为这是值得分享的,希望它能启发其他人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63212321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档