python序列构成的数组之内置序列类型

  • 容器序列
        list、tuple和collections.deque 这些序列能存放不同类型的数据。
  • 扁平序列
        str、bytes、bytearray、memoryview、和array.array,这类序列只能容纳一种类型数据。

容器序列存放的是它们所包含的任意类型的对象的引用,而扁平序列里存放的是值而不是引用。

按序列能否被修改来分类,可分为可变序列和不可变序列。

  • 可变序列
        list、bytearray、array.array、clollections.deque和memoryview。
  • 不可变序列
        tuple、str、和bytes。
"""
子类
MutableSequence(可变序列):
    __setitem__
    __delitem__
    insert
    append
    reverse
    extend
    pop
    remove
    __iadd__
子类
Sequence(不可变序列):
    __getitem__
    __contains__
    __iter__
    __reversed__
    index
    count

超类
__contains__
__iter__
__len__

举例测试可变序列和不可变序列的部分方法
"""
class ListSequence:
    def __init__(self, list_sequence):
        self.list_sequence = list_sequence

    def use_append(self, data):
        self.list_sequence.append(data)
        print(self.list_sequence)

    def use_reverse(self):
        self.list_sequence.reverse()
        print(self.list_sequence)

    def use_extend(self, list_data):
        self.list_sequence.extend(list_data)
        print(self.list_sequence)

    def use_pop(self, index):
        element = self.list_sequence.pop(index)
        # element = self.list_sequence.pop() 会弹出最后一个元素
        print(self.list_sequence, element)

    def use_remove(self, element):
        self.list_sequence.remove(element)
        print(self.list_sequence)

    def use_add(self, data):
        # 相加后返回,加数不变
        res = self.list_sequence.__add__(data)
        print(self.list_sequence, res)

    def use_iadd(self, data):
        # 自增后并返回,加数改变
        res = self.list_sequence.__iadd__(data)
        print(self.list_sequence, res)


class TupleSequence:
    def __init__(self, tuple_sequence):
        self.tuple_sequence = tuple_sequence

    def contains(self, element):
        print(self.tuple_sequence.__contains__(element))

    def use_iter(self):
        tuple_iter = self.tuple_sequence.__iter__()
        print(tuple_iter)           # 迭代器
        # print(next(tuple_iter))    用next()调用一次迭代器会返回一个数据
        # print(next(tuple_iter))
        # print(next(tuple_iter))
        # print(next(tuple_iter)) 超出序列index会抛出StopIteration异常
        return self.tuple_sequence.__iter__()


if __name__ == '__main__':
    print("------list------")
    ls = ListSequence([])
    ls.use_append(1)
    ls.use_append(2)
    ls.use_append(3)
    ls.use_reverse()
    ls.use_extend(['a', 'b', 'c'])
    ls.use_pop(0)
    ls.use_remove('a')
    ls.use_add(['+', '+', '+'])
    ls.use_iadd(['+', '+', '+'])
    print("------tuple------")
    ts = TupleSequence((1, 2, 3))
    ts.contains(1)
    tuple_iter_for = ts.use_iter()

    print("使用for循环遍历迭代器")
    for ele in tuple_iter_for:
        # 使用for遍历迭代器
        print(ele)
    # 或者:
    tuple_iter_while = ts.use_iter()
    print("使用while循环遍历迭代器")

    while True:
        try:
            print(next(tuple_iter_while))
        except StopIteration:
            break

运行结果:

------list------
[1]
[1, 2]
[1, 2, 3]
[3, 2, 1]
[3, 2, 1, 'a', 'b', 'c']
[2, 1, 'a', 'b', 'c'] 3
[2, 1, 'b', 'c']
[2, 1, 'b', 'c'] [2, 1, 'b', 'c', '+', '+', '+']
[2, 1, 'b', 'c', '+', '+', '+'] [2, 1, 'b', 'c', '+', '+', '+']
------tuple------
True
<tuple_iterator object at 0x01591E90>
使用for循环遍历迭代器
1
2
3
<tuple_iterator object at 0x01591ED0>
使用while循环遍历迭代器
1
2
3

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值