Рассмотрим dequeue = [2, 3, 4, None, None, None, 1]. Он является круглым и предполагает, что 1 является фронтом dequeue, а 4 - задней частью dequeue, стучите по дереву, мы должны иметь эти индексы, хранящиеся под переменными спереди и сзади, их значения равны 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, представляющие индексы переднего и заднего от dequeue.
Вы хотите использовать встроенный deque
? Если это так, он поддерживает стандартную итерацию, делая понимание списка довольно pythonic:
'[{}]'.format(', '.join(x for x in my_deque if x is not None)
Если это не встроенный deque
, почему бы не добавить поддержку итерации к вашему типу, чтобы разрешить вышеупомянутый метод (и, вероятно, многие другие методы).