python中常用序列结构有列表、元组、字符串,字典及range、zip、filter等对象也支持很多类似的操作
一个列表中的数据类型可以各不相同
列表常用方法
list.append() -> 将元素x添加到列表尾部
list.extend(L) -> 将列表L中所有元素添加到列表list尾部
list.clear() -> 删除列表中所有元素,但保留列表对象
list.count(x) -> 返回该元素在列表中的出现次数
list.sort(key=None, reverse=False) -> 对列表中的元素进行排序, key用来指定排序依据,reverse决定升序(False)还是逆序
可以使用 del 删除整个列表
列表元素的增加
python采用的是基于值的自动内存管理方式,当为对象修改值时,并不是真的修改变量的值,而是使变量指向新的值,这对于python所有类型的变量都是一样的
列表中包含的是元素值的引用,而不是直接包含元素值
如果通过下标来修改列表中元素的值或通过可变序列对象自身提供的方法来增加和删除元素时,序列对象在内存中的起始地址是不变的,仅仅是被改变值的元素地址发生改变,也就是所谓的“原地操作”
使用乘法来扩展列表对象,将列表与整数相乘,生成一个新列表,新列表是原列表中元素的重复
当使用*运算符将包含列表的列表重复并创建新列表时,并不是复制子列表值,而是复制已有元素的引用。因此,当修改其中一个值时,相应的引用也会改变
列表元素的删除
在删除列表元素时,Python会自动对列表内存进行收缩并移动列表元素以保证所有元素之间没有空隙,增加列表元素时也会自动扩展内存并对元素进行移动以保证元素之间没有空隙。每当插入或删除一个元素之后,该元素位置后面所有元素的索引就都改变了。
列表元素访问与计数
使用列表对象的index()方法获取指定元素首次出现的下标,若列表对象中不存在指定元素,则抛出异常
使用列表对象的count()方法统计指定元素在列表对象中出现的次数
成员资格判断
使用in关键字来判断一个值是否在列表中,返回True或False
列表排序与逆序
使用列表对象的sort()方法进行原地排序,sort()没有返回值
参数reverse默认为False -> 升序
使用内置函数sorted()对列表进行排序并返回新列表——> 内置函数sorted()返回排序后的新列表,不对原列表进行修改
使用列表对象的reverse()方法将元素原地逆序,并返回一个可迭代对象
用于序列操作的常用内置函数
all()函数用来测试序列对象及map对象、zip对象中是否所有元素都等价于True
any()函数用来测试序列中是否含有等价于True的元素
len(序列) 返回元素个数
max(序列)、min(序列) 返回最大及最小值
zip(可迭代对象, 可迭代对象)
zip能够将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回这些元组组成的对象,这样做可以节省不少内存
例如: dict(zip(a, b))
list(zip(a, b))
其中a、b为非空列表
enumerate(列表): 枚举列表元素,返回枚举对象,其中每个元素为包含下标和值的元组
for item in enumerate('abcdef'):
print(item)
元组(不可变序列)
包含一个元素的元组,最后必须多写个逗号
使用del可以删除元组对象,不能删除元组中的元素
元组与列表的区别
元组的查找速度比列表更快 ,如果定义了一系列常量值,而所需做的仅仅是对它进行遍历,那么一般使用元组而不用列表
元组可以作为字典的键,也可以作为集合的元素。列表、字典、集合或其他类型可变对象的元组不能作为字典的键
如果元组中包含列表或其他类型的可变对象,这些对象是可变的,但是元组元素的引用是不可变的
字典元素的读取
使用字典对象的get()方法可以获取指定键对应的值,并且可以在键不存在的时候返回指定值
集合
集合是无序、可变序列,使用一对大括号界定,元素不可重复
集合中只能包含不可变类型的数据
可以使用del删除整个集合,集合对象的pop方法弹出并删除其中一个元素,remove方法直接删除指定元素,clear方法清空集合
集合运算