Печать непустой части круглого блеска
Рассмотрим очередь =[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
почему бы не добавить поддержку итераций к вашему типу, чтобы разрешить вышеуказанный метод (и, возможно, многие другие методы).