python中的数据结构之deque

来源:互联网 发布:阿里云设置伪静态 编辑:程序博客网 时间:2024/06/07 04:52

数据结构

数据结构真的很简单,不要被这个高大上的名字所欺骗了。


双端队列

什么是双端队列?
就是元素可以从两端进行添加,或者从两端进行删除。

from collections import deque

使用双端队列来进行回文的判断:所谓的回文就是正序和逆序一样的字符串,str1 == str1[::-1],注意哦,python字符串并没有reverse方法。

通过双端队列的判断方法是:在简单性上当然不如上面的字符切片逆序方法来判断回文,但是这里主要是要练习从两端去访问数据。

def palindrome(word):    from collections import deque    dq = deque(word)    while len(dq)>1:        if dq.popleft() != dq.pop():            return False    return True



你可以看看源码就知道了,deque应该是c写的(出于性能考虑),暴露给我们的接口如下。

class deque(object):    """    deque([iterable[, maxlen]]) --> deque object        Build an ordered collection with optimized access from its endpoints.    """    def append(self, *args, **kwargs): # real signature unknown        """ Add an element to the right side of the deque. """        pass    def appendleft(self, *args, **kwargs): # real signature unknown        """ Add an element to the left side of the deque. """        pass    def clear(self, *args, **kwargs): # real signature unknown        """ Remove all elements from the deque. """        pass    def count(self, value): # real signature unknown; restored from __doc__        """ D.count(value) -> integer -- return number of occurrences of value """        return 0    def extend(self, *args, **kwargs): # real signature unknown        """ Extend the right side of the deque with elements from the iterable """        pass    def extendleft(self, *args, **kwargs): # real signature unknown        """ Extend the left side of the deque with elements from the iterable """        pass    def pop(self, *args, **kwargs): # real signature unknown        """ Remove and return the rightmost element. """        pass    def popleft(self, *args, **kwargs): # real signature unknown        """ Remove and return the leftmost element. """        pass    def remove(self, value): # real signature unknown; restored from __doc__        """ D.remove(value) -- remove first occurrence of value. """        pass    def reverse(self): # real signature unknown; restored from __doc__        """ D.reverse() -- reverse *IN PLACE* """        pass    def rotate(self, *args, **kwargs): # real signature unknown        """ Rotate the deque n steps to the right (default n=1).  If n is negative, rotates left. """        pass    def __copy__(self, *args, **kwargs): # real signature unknown        """ Return a shallow copy of a deque. """        pass    def __delitem__(self, y): # real signature unknown; restored from __doc__        """ x.__delitem__(y) <==> del x[y] """        pass    def __eq__(self, y): # real signature unknown; restored from __doc__        """ x.__eq__(y) <==> x==y """        pass    def __getattribute__(self, name): # real signature unknown; restored from __doc__        """ x.__getattribute__('name') <==> x.name """        pass    def __getitem__(self, y): # real signature unknown; restored from __doc__        """ x.__getitem__(y) <==> x[y] """        pass    def __ge__(self, y): # real signature unknown; restored from __doc__        """ x.__ge__(y) <==> x>=y """        pass    def __gt__(self, y): # real signature unknown; restored from __doc__        """ x.__gt__(y) <==> x>y """        pass    def __iadd__(self, y): # real signature unknown; restored from __doc__        """ x.__iadd__(y) <==> x+=y """        pass    def __init__(self, iterable=(), maxlen=None): # known case of _collections.deque.__init__        """        deque([iterable[, maxlen]]) --> deque object                Build an ordered collection with optimized access from its endpoints.        # (copied from class doc)        """        pass    def __iter__(self): # real signature unknown; restored from __doc__        """ x.__iter__() <==> iter(x) """        pass    def __len__(self): # real signature unknown; restored from __doc__        """ x.__len__() <==> len(x) """        pass    def __le__(self, y): # real signature unknown; restored from __doc__        """ x.__le__(y) <==> x<=y """        pass    def __lt__(self, y): # real signature unknown; restored from __doc__        """ x.__lt__(y) <==> x<y """        pass    @staticmethod # known case of __new__    def __new__(S, *more): # real signature unknown; restored from __doc__        """ T.__new__(S, ...) -> a new object with type S, a subtype of T """        pass    def __ne__(self, y): # real signature unknown; restored from __doc__        """ x.__ne__(y) <==> x!=y """        pass    def __reduce__(self, *args, **kwargs): # real signature unknown        """ Return state information for pickling. """        pass    def __repr__(self): # real signature unknown; restored from __doc__        """ x.__repr__() <==> repr(x) """        pass    def __reversed__(self): # real signature unknown; restored from __doc__        """ D.__reversed__() -- return a reverse iterator over the deque """        pass    def __setitem__(self, i, y): # real signature unknown; restored from __doc__        """ x.__setitem__(i, y) <==> x[i]=y """        pass    def __sizeof__(self): # real signature unknown; restored from __doc__        """ D.__sizeof__() -- size of D in memory, in bytes """        pass    maxlen = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default    """maximum size of a deque or None if unbounded"""    __hash__ = None