Python для l oop итерация не завершена, шаги пропущены - PullRequest
0 голосов
/ 02 августа 2020

Я получил ошибку «неправильный ответ» в моем алгоритме « очередь из стека », когда я ожидал, что он сработает. Для тех, кто не знаком с алгоритмом, решение требует двух стеков типа списка - «pu sh stack» и «pop stack», который по сути является буфером очереди, в который стек pu sh выгружает себя, когда стек очереди вызывается и становится пустым. Посмотрите, сможете ли вы определить, что происходит и где проблема.

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]

1 Ответ

0 голосов
/ 02 августа 2020

Слишком много делалось над строкой добавления, как бы умно и лаконично это ни казалось. Когда кто-то появляется из итерации, которая в настоящее время повторяется, это путает процесс count и python итератора, или это то, что я предполагаю. То же самое происходит в Excel, когда вы удаляете строки, одновременно просматривая их (но не вверх). Я просто предположил, что Python смог бы как-то справиться с этим самостоятельно.

Problemati c code.

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:

    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:

    for _ in reversed(self.stack_to_push_to):
        self.queue_buffer.append(_)
    self.stack_to_push_to = []

I Я не видел, чтобы кто-то еще опубликовал эту проблему, поэтому я подумал, что стоит поделиться ею, и надеюсь, что это просветит других.

...