- 容器序列
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