Python数据类型之“序列概述与基本序列类型(Bas(3)

b) 对于 s = n操作,如果n小于0或等于0,序列s将被清空;另外如果n大于1,序列s并没有被复制,它们只是被引用了多次,这与序列通用操作中的s n是一样的。

不可变序列支持的操作

不可变序列类型通常实现而可变序列没有实现的唯一操作是对内建hash()方法的支持。对内建hash()的支持允许不可变序列(例如tuple)用作dict的键并存储在set和frozenset的实例中。如果尝试hash一个包含不可被hash的数据的不可变序列会导致TypeError错误。

三、Python中的基本序列(basic sequences)

Python中的基本序列类型包括: list、tuple、range,而str属于特殊序列类型,专门用于处理文本序列,这个后面单独进行说明。

1. List(列表)

Python中的列表是可变序列,通常用于存储相同类型的数据集合,当然也可以存储不同类型数据。Python中的列表表现形式有点像其他语言中的属组:列表中的元素是用方括号[]括起来,以逗号进行分割。

list类构建函数 class list([iterable]) # 这里的方括号表示iterable是可选项 list的创建方式

使用方括号,用逗号分隔各条目:[],['a'], [a, b, c]

使用类型构造函数:list(), list(iterable)

使用列表生成式:[x for x in iterable]

列表构造函数list(iterable)会创建一个与可迭代对象iterable中的条目及条目顺序都相同的列表。可迭代对象iterable可以是一个序列(sequence)、一个支持迭代操作的容器(container),也可以是一个迭代器对象(iterator object)。如果iterable已经是一个list,则创建一个copy并返回,类似于iterable[:]。如果没有指定参数,列表构造函数会创建一个新的空list, []。

创建list示例: >>> list1 = [] # 空列表 >>> list1 [] >>> list2 = ["Tom", "Jerry", "Lucy", "Peter"] # 非空列表 >>> list2 ['Tom', 'Jerry', 'Lucy', 'Peter'] >>> >>> list3 = list() # 列表构造函数创建空列表 >>> list3 [] >>> list4 = list(list2) >>> list4 ['Tom', 'Jerry', 'Lucy', 'Peter'] >>> >>> list5 = [x for x in list2] # 列表生成式 >>> list5 ['Tom', 'Jerry', 'Lucy', 'Peter']

list实现了所有通用(common)序列操作和可变序列(mutable sequence)操作,此外,list还提供了一些附加方法。

list通用序列操作示例 >>> s = [1, 2, 3, 'a', 'b', 'c'] >>> 1 in s # 包含判断 True >>> 1.0 in s # 数字不严格区分类型(1==1.0==True) True >>> 1 not in s # 不包含判断 False >>> s + ['d', 'e', 'f'] # 拼接操作 [1, 2, 3, 'a', 'b', 'c', 'd', 'e', 'f'] >>> s * 2 # 重复2次 [1, 2, 3, 'a', 'b', 'c', 1, 2, 3, 'a', 'b', 'c'] >>> s[3] # 获取下标为3的条目 'a' >>> s[3:6] # 获取序列s的切片,下标分别为 3,4,5 ['a', 'b', 'c'] >>> s[1:6:2] # 获取序列s的切片,步长为2,下标分别为 1,3,5 [2, 'a', 'c'] >>> len(s) # 获取序列长度 6 >>> min(s) # min()和max()的参数中,数据类型需要有可比性 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: str() < int() >>> max([1, 2, 3, 4.0, 5.0]) 5.0 >>> min([1, 2, 3, 4.0, 5.0, False]) False >>> >>> [1, 2, 3, 4, 2, 5, 6, 3, 2].index(2) # 获取2在序列s中第一次出现的下标位置 1 >>> [1, 2, 3, 4, 2, 5, 6, 3, 2].index(2, 3) # 获取序列s从下标3开始查找2第一次出现的下标位置 4 >>> s.count(2) # 统计2在序列s中出现的次数 1 >>> [1, 2, 3, 4, 2, 5, 6, 3, 2].count(2) 3 >>> len([1, 2, 3, 4, 5]) # 获取序列长度 5 list可变序列操作示例 >>> s = [1, 2, 3, 4] >>> s [1, 2, 3, 4] >>> s.append(5) # 向list末尾追加一个条目 >>> s [1, 2, 3, 4, 5] >>> s.insert(0,0) # 向list开始位置插入一个条目 >>> s [0, 1, 2, 3, 4, 5] >>> s.extend([6, 7, 8, 9]) # 扩展list, 向list末尾拼接多个条目 >>> s [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> s[9] = 99 # 将list中下标为9的条目替换为99 >>> s [0, 1, 2, 3, 4, 5, 6, 7, 8, 99] >>> s[6:9] = ['a', 'b'] # 将list中范围为从6到9(不包含9)的切片替换为['a', 'b'] >>> s [0, 1, 2, 3, 4, 5, 'a', 'b', 99] >>> s[6:10]=['A','B'] # 同上,此处10为list的长度,表示切片范围是到list末尾的 >>> s [0, 1, 2, 3, 4, 5, 'A', 'B'] >>> s.pop() # 移除list末尾的条目 'B' >>> s [0, 1, 2, 3, 4, 5, 'A'] >>> s.pop(5) # 移除list中下标为5的条目 5 >>> s [0, 1, 2, 3, 4, 'A'] >>> s.remove('A') # 移除list中的指定条目'A' >>> s [0, 1, 2, 3, 4] >>> del s[1:5:2] # 删除list中下标为 1,3 的条目 >>> s [0, 2, 4] >>> s.reverse() # 将list中元素位置进行反转,list本身发生改变 >>> s [4, 2, 0] >>> s.copy() # list浅拷贝,list本身不发生改变 [4, 2, 0] >>> s [4, 2, 0] >>> s *= 2 # 相当于 s = s * 2 >>> s [4, 2, 0, 4, 2, 0] list支持的额外操作 sort(*, key=None, reverse=None)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/24d410b85e7f6a2f658f07e3275ec01d.html