序列是一种数据存储方式,用来存储一系列的数据。
序列中存储的是对象的地址,而不是对象的值。python中常用的序列结构有:字符串、列表、元组、字典、集合
例: 定义一个序列 a =[10,20,30,40],在内存中的存储方式
列表
用于存储任意数目,任意类型的数据集合
列表中元素可以各不相同,可以是任意类型
如 :a=[12,"abc",True]
列表对象的常用方法汇总
Python中的列表大小可变,根据需要随时增加或缩小
列表的创建
基本语法[ ]创建
>>> a = [10,20,"abc","hahaha"] >>> a = [] #创建一个空的列表对象
list()创建
>>> a = list() >>> a = list(range(10)) >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a = list("python") >>> a ['p', 'y', 't', 'h', 'o', 'n']
range ()创建整数列表
range([start,] end [,step])
start:可选,默认为0
end:必选,表示结尾数字
step:可选,表示步长,默认为1
a = [x*2 for x in range(100) if x%9 ==0] >>> a [0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]
列表元素的增加和删除
append()方法
原地修改列表对象是真正的列表尾部添加新的元素,速度最快,推荐使用
>>> a = [20,40] >>> a.append(50) >>> a [20, 40, 50]
+运算符操作
创建新的列表对象;将原列表元素依次复制到新列表对象中。会涉及大量的复制操作,不建议使用
>>> a = [20,40] >>> id(a) 2283134467328 >>> a = a+ [50] >>> id(a) 2283134467584
extend()方法
将所有元素添加到本列表的尾部,属于原地操作,不创建新的对象
>>> a = [20,40] >>> id(a) 2283134467328 >>> a.extend([50,60]) >>> id(a) 2283134467328
insert()插入元素
可以将元素插入到列表对象的任意指定位置。会让插入位置后面的所有元素进行移动,影响处理速度。设计大量元素时,尽量避免使用。类似发生这种移动的函数有remove() pop() del()
>>> a = [10,20,30] >>> a.insert(2,100) >>> a [10, 20, 100, 30]
乘法扩展
>>> a = ["Python",12,True] >>> b = a *3 >>> b ['Python', 12, True, 'Python', 12, True, 'Python', 12, True]
列表元素的删除
del删除
删除列表指定位置的元素(本质:列表的拷贝)
>>> a = [10,20,30] >>> del a[1] >>> a [10, 30]
pop()方法
pop()删除并返回指定元素位置,如果未指定位置则默认操作列表最后一个元素
>>> a = [10,20,30,40,50,60] >>> a.pop() 60 >>> a [10, 20, 30, 40, 50] >>> a.pop(2) 30 >>> a [10, 20, 40, 50]
remove()方法
删除首次出现的指定元素,若不存在该元素则抛出异常
>>> a = [10,20,30,40,50,20,30,20,30,40] >>> a.remove(20) >>> a [10, 30, 40, 50, 20, 30, 20, 30, 40] >>> a.remove(100) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: list.remove(x): x not in list >>>
列表元素的访问和计数
通过索引直接访问元素
>>> a = [10,20,30,40,50,20,30,20,30,40] >>> a[2] 30 >>> a[10] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range
index()获得指定元素在列表中首次出现的索引
>>> a = [10,20,30,40,50,20,30,20,30,40] >>> a.index(20) 1 >>> a.index(20,3) 5
count()获得指定元素在列表中出现的次数
>>> a = [10,20,30,40,50,20,30,20,30,40] >>> a.count(20) 3
len()返回列表的长度
>>> a=[10,20,30] >>> len(a) 3
成员资格的判断
判断列表中是否存在指定的元素,我们可以使用count()方法,返回0则表示不存在,返回大于0则表示存在。但是,一般我们会使用更加简洁的关键字 in 来判断,直接返回True 或 False
>>> a = [10,20,30,40,50,20,30,20,30,40] >>> 20 in a True >>> 100 not in a True
切片操作slice
切片slice操作可以让我们快速提取子列表或修改。标准格式:
[起始偏移量start:终止偏移量end[:步长step]]
典型操作
其它操作(三个量为负数)的情况
列表的遍历
>>> a = [10,20,30,40,50,20,30,20,30,40] >>> for x in a : ... print(x) ... 10 20 30 40 50 20 30 20 30 40
列表排序
修改原列表,不新建新的列表的排序
>>> a = [2,1,3,4] >>> a.sort() >>> a [1, 2, 3, 4] >>> a = [2,1,3,4] >>> id(a) 2052279436736 >>> a.sort() >>> a [1, 2, 3, 4] >>> id(a) 2052279436736 >>> a.sort(reverse=True) >>> a [4, 3, 2, 1] >>> import random >>> random.shuffle(a) >>> a [2, 4, 1, 3] >>> id(a) 2052279436736
建新列表的排序
>>> a = [2,1,4,3] >>> a = sorted(a) >>> a = [2,1,4,3] >>> id(a) 2052279436544 >>> a = sorted(a) >>> a [1, 2, 3, 4] >>> id(a) 2052279436736 >>> a = sorted(a,reverse=True) >>> a [4, 3, 2, 1] >>> id(a) 2052279436544
reversed()返回迭代器
内置函数也支持进行逆序排列,与列表对象reverse()方法不同的是,内置函数reversed()不对原列表做任何修改,只是返回一个逆序排列的迭代器对象
>>> a = [2,1,4,3] >>> c = reversed(a) >>> c <list_reverseiterator object at 0x000001DDD5621A30> >>> list(c) [3, 4, 1, 2] >>> list(c) []
其它方法
>>> a = [2,1,4,3] >>> max(a) 4 >>> min(a) 1 >>> sum(a) 10
多维列表
二维列表
源码:
a = [
["高小一",18,30000,"北京"],
["高小二",19,20000,"上海"],
["高小五",20,10000,"深圳"]
]