Python 运维程序员

顺序表

2017-11-20  本文已影响16人  Zero2none

写在前面的

所谓数据结构,为的是提供一个可以存放的地方。
与此同时,可以对这个地方进行各种各样的操作。

然而这个结构的最终目的是为了可以不用一遍遍的反正实现而成的。

开始吧

线性表则是这样一个东西,顺序表也同样如此。

对于Py交易而言自然有它独到的地方。

有一个词Pythonic可以很好的形容。

初始化

def __init__(self, maxSize=10):
    """Init the sequence list
    :param __maxSize: The max size of list length.
                    If the __maxSize=None, it means length -> ∞.
    """
    super(SequenceList, self).__init__()

    self.__check(maxSize)

    self.List = []

    self.__maxSize = maxSize

这便是Py交易的初始化,

Py交易中有一个List的内置数据结构可以很轻松地完成,
对于顺序表的四个操作,嗯~它都有,只不过在这里,通过顺序表进行封装起来而已。

销毁

def __del__(self):
    """Built-in function: To clear the list.
    """
    self.List.clear()

Py交易类的专有方法,析构函数,或者也可以通过自定义函数实现,不过
某种意义上而言,对于Py交易并不需要析构函数,Py交易的垃圾回收机制可以很好的解决这个问题。

长度

def __len__(self):
    """Built-in func: Get the length of the list.
    """
    return len(self.List)

Py交易类的专有方法,可以返回一个类的‘长度’。
函数本身反正调用的是List本身的len()函数。

遍历操作

def traverse_register(self, fn):
    """A decorator for fitness function register.
    :param fn: The func make by yourself.
    """
    self.func = fn

遍历操作,在遍历之前需要用语法糖将遍历注册倒traverse_register()函数中。

遍历,可不单单指的是输出哦~

def traverse(self, reverse=False):
    """Traverse The every element of list.
    :prarm reverse: Reverse list to traverse.
    """
    List = self.List
    if reverse:
        List = reversed(List)

    for i in List:
        self.func(i)

遍历开始了,Py交易对循环支持的很好,这里为了更Pythonic,而增加了reverse参数支持反向遍历。

追加操作

def append(self, data):
    """Append element element to list.
    :param data: The element that append to.
    """
    if self.flag:
        if not len(self) < self.__maxSize:
            raise AttributeError(
                'The parameter index must be less than __maxSize. ¯\\_(ツ)_/¯...')
    self.List.append(data)
    """
    There hava a question about the variable of "data".
    Should keep the instance of the SequenceList? or not?

    In the data structure it is controled by __maxSize. 
    """

append()函数这是一个启动整个数据结构的函数,没有了这个函数嘛,¯\(ツ)/¯ ...

同样Py交易调用的是本身List内置方法来实现。


疑问

其实刚开始写到这里的时候是有两个疑问

  1. 是否应该固定顺序表的长度呢?
  2. 是否应该确保顺序表内每个元素的类型相同?
回答

依次回答

  1. 为此,甚至而外增加了个参数maxSize用来控制顺序表的长度,看实际情况喽。
  2. 其实不用控制每个元素的类型反而是有益的 -> Pythonic

SourceCode


最后,就酱

上一篇下一篇

猜你喜欢

热点阅读