Печать непустой части круглого блеска

Рассмотрим очередь =[2, 3, 4, Нет, Нет, Нет, 1]. Он является круглым и предполагает, что 1 - передняя часть очереди, а 4 - задняя часть очереди, стук по дереву, эти индексы должны храниться под переменными front и back, их значения равны 6 и 2 соответственно.

Как можно распечатать значения между индексами спереди и сзади, то есть [1, 2, 3, 4]. Еще лучше, а точнее, я надеялся найти способ сделать строку, которая более конкретно выглядела бы как [1, 2, 3, 4]. Мой код выглядит следующим образом, но я не верю, что он эффективен по времени и, кроме того, в рамках большей части моего кода я не уверен, что этот метод работает.

def str (self):

if self.size==0:       #my first thoughts are to simply catch an empty dequeue
    return "[ ]"

elif self.size==1:      #same for a dequeue of only one object.
    string = "[ "+str(self.__contents[0])+" ]"
    return string

else:
    string="[ "
    index=self.front
    while (index%self.capacity) != self.back:
        string = string + str(self.contents[index]) + ", "
        index+=1
    string=string+str(self.__contents[self.back]) + " ]"
    return string

Где self.size= количество непустых записей, self.capacity= общее количество ячеек в массиве, self.contents, представляющие содержимое массива, а self.front и self.back, представляющие индексы front и back из очереди.

1 ответ

Хотите использовать встроенный deque? Если это так, он поддерживает стандартную итерацию, что делает понимание списка довольно питонным:

'[{}]'.format(', '.join(x for x in my_deque if x is not None)

Если это не встроенный deque почему бы не добавить поддержку итераций к вашему типу, чтобы разрешить вышеуказанный метод (и, возможно, многие другие методы).

Другие вопросы по тегам