打印圆形出队的非空部分

时间:2018-07-27 06:57:36

标签: python list deque circular-list arraydeque

考虑出队= [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代表索引的索引。出队的前后。

1 个答案:

答案 0 :(得分:2)

您要使用内置的deque吗?如果是这样,它就支持标准迭代,从而使列表理解非常具有Pythonic:

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

如果它不是内置的deque,为什么不为您的类型添加迭代支持以允许上述方法(可能还有许多其他方法)。