本系列为自己学习Python的笔记,如有误,欢迎大家指正
列表特点
序列是一种数据存储方式,用来存储一系列的数据。在内存中,序列就是一块用来存放多个值的连续的内存空间。比如一共整数序列[10,20,30,40]可以这样示意表示:
由于python3中一切皆对象,在内存中实际上是按照下列方式存储的:
a=[10,20,30,40]
从图中,可以看出序列中存储的是整数对象的地址,而不是整数对象的值。python中常用的序列结构有:字符串 列表 元祖 字典 集合。
列表简介
列表:用于存储任意数目、任意类型的数据集合
列表内置可变序列,是包含多个元素的有序连续的内存空间。列表定义的标准语法格式:
a=[10,20,30,40]
其中,10 20 30 40这些称为:列表a的元素
列表中的元素可以各不相同,可以是任意类型。比如:
a=[10,20,‘abc’,True]
列表对象的常用方法:
方法 | 要点 | 描述 |
---|---|---|
list.append(x) | 增加元素 | 将元素x增加到列表list尾部 |
list.extend(aLIst) | 增加元素 | 将列表aLIst所有元素都增加到列表list尾部 |
list.insert(index,x) | 增加元素 | 在列表list指定位置index处插入元素x |
list.remove(x) | 删除元素 | 在列表list中删除首次出现的指定元素x |
list.pop(x) | 删除元素 | 删除并返回列表list指定位置index处的元素 |
list.pop([index]) | 删除元素 | 删除并返回列表list指定位置index处的元素,默认是最后一个元素 |
list.clear() | 删除所有元素 | 删除列表所有元素,并不是删除列表对象 |
list.index(x) | 访问元素 | 返回第一个x的索引位置,若不存在x元素则抛出异常 |
list.count(x) | 计数 | 返回指定元素x在列表list中出现的次数 |
len(list) | 列表长度 | 返回列表中包含元素的个数 |
list.reverse() | 翻转列表 | 所有元素原地翻转 |
list.sort() | 排序 | 所有元素原地排序 |
list.copy() | 浅拷贝 | 返回列表对象的浅拷贝 |
Python的列表大小可变,根据需要随时增加或缩小
字符串和列表都是序列类型,一个字符串是一个字符序列,一个列表是任何元素的序列。
列表的创建
基本语法[]的创建
a = [10,20,'slp','sx']
a=[] #创建一个空的列表对象
list()创建
使用list()可以将任何可迭代的数据转化为列表
a =list()# 创建一个空的列表对象
a = list(range(10))
a = list('slp,sx')
range()创建整数列表
range()可以帮助我们非常方便的创建整数列表:range([start],end,[step])
- start:可选 起始数字 默认0
- end:必选 结尾数字
- step:可选 表示步长 默认为1
python3中range()返回的是一个range对象,而不是列表,我们需要通过list方法将其转换成列表对象。
推导式生成列表
使用列表推导式可以非常方便的创建数据,在开发中经常使用。但是,由于涉及到for循环和if语句
a = [x*2 for x in range(5)] #循环创建多个元素
a = [x*2 for x in range(100) if x%9==0] #通过if过滤元素
列表元素的增加和删除
当列表增加和删除元素时,列表会自动进行内存管理,大大减少了程序员的负担。但这个特点涉及列表元素的大量移动,效率较低。除非毕业,我们一般只在列表的尾部添加元素,这会大大特高列表的操作效率。
append()方法
原地修改列表对象,是真正的列表尾部添加新的元素,速度最快。推荐使用
a = [20,40]
a.append(80)
+运算符操作
并不是真正的尾部添加元素,而是创建新的列表对象;将原列表的元素和新列表的元素依次复制到新的列表对象中。这样,会涉及大量的复制操作,对于操作大量元素不建议使用。
a = [20,40]
id(a) #46016027
a = a+[50]
id(a)# 46015432
由上可知,a的地址发生了变化,也就是创建了新的列表对象。
extend()方法
将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象
a = [20,40]
a.extend([50,60])
insert()插入元素
使用insert()方法可以将制定的元素插入到列表对象的任意制定位置。这样会让插入位置后面所有的元素进行移动,会影响处理速度。涉及大量元素时,尽量避免使用。类似这种发生移动的函数还有remove() pop() del() 他们在删除非尾部元素时也会发生操作位置后面元素的移动
乘法扩展
使用乘法扩展列表,生成一个新列表,新列表元素是原列表元素的多次重复。
适用于乘法操作的还有:字符串 元祖。
del删除
删除列表指定位置的元素 (底层原理还是数组的拷贝)
a = [10,20,30]
del a[1] #删除第一个元素,下标是从0开始的
pop()方法
pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素
a = [10,20,30]
a.pop() #30
remove()
删除首次出现的指定元素,若不存在该元素抛出异常
a=[10,20,10,30]
a.remove(10) #[20,10,30]
列表元素的访问和计数
通过索引直接访问元素
我们可以通过索引直接访问元素,索引的区间在[0,列表长度-1]这个范围,超过这个范围则会抛出异常
index()获得指定元素在列表中首次出现的索引
index()可以获取指定元素首次出现的索引位置,语法是index(value,[start,[end]])其中start和end指定了搜索的范围
count()获得指定元素在列表中出现的次数
count()可以返回指定元素在列表中出现的次数
a = [10,20,10,30]
a.count(10) #2
len()返回列表长度
len()返回列表长度,即元素个数
成员资格判断
判断列表中是否存在指定的元素,我们可以使用count()方法,返回0则表示不存在,大于0则表示存在,但是一般我们会使用更加简洁的in关键字来判断,直接返回True或False
a = [10,20,40]
10 in a #True
切片操作
切片是python序列及其重要的操作,适用于列表、元祖、字符串等等
切片的格式如下:
[起始偏移量 start 终止偏移量 end [:步长 step]]
典型操作如下(参数为正的情况):
操作和说明 | 示例 | 结果 |
---|---|---|
[:] 提取整个列表 | [10,20,30] [:] | [10,20,30] |
[start:从start索引开始到结尾] | [10,20,30] [1:] | [20,30] |
[:end] 从头开始到end-1 | [10,20,30] [:2] | [10,20] |
[start:end]从start开始到end-1 | [10,20,30,40] [1:3] | [20,30] |
[start : end: step] 从start开始提取到end-1 步长是step | [10,20,30,40,50,60,60] [1:6:2] | [20,40,60] |
其他操作(三个量为负数):
示例 | 说明 | 结果 |
---|---|---|
[10,20,30,40,50,60,70] [-3:] | 倒数三个 | [50,60,70] |
[10,20,30,40,50,60,70] [-5:-3] | 倒数第五个到倒数第三个(包头不包尾) | [30,40] |
[10,20,30,40,50,60,70] [::-1] | 步长为负,从右到左反向提取 | [70,60,50,40,30,20,10] |
切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错,起始小于0会当做0,终止大于长度-1会当成-1
列表的遍历
for i in listObj:
doSomething()
复制列表所有的元素到新列表对象
如下代码实现列表元素的复制了吗?
list1 = [30,40,50]
list2 = list1
只是将list2也指向了列表对象,也就是list2和list1持有地址值是相同的。列表元素本身并没有复制。
列表排序
修改原列表,不建新列表的排序
a = [20,10,30,40]
id(a)
a.sort() #默认是升序
a.sort(reerse=True) #降序排列
random.shuffle(a) #打乱顺序
建新列表的排序
我们也可以通过==内置函数sorted()==进行排序,这个方法返回新列表
a = [20,10,30,40]
id(a)
a = sorted(a) # 内置函数 会生成新的列表,所以下方id函数的返回值会变掉
id(a)
reversed()返回迭代器
内置念书reversed()也支持进行逆序排列,与列表对象reversed()方法不同的是,内置函数reversed()不对原列表做任何修改,只是返回一个逆序排列的迭代器对象。
a = [20,10,30,40]
c = reversed(a)
list(c) #C是一个迭代器对象,需要转换一下 迭代器只能用一次 转换一次之后就不能再用了
列表内置其他函数相关汇总
max和min
返回列表中最大和最小值
sum
对数值列表的所有元素进行求和操作,对非数值列表运算会报错
多维列表
二维列表
一维列表可以帮助我们存储一维。线性的数据
二维列表可以帮助我们存储二维、表格的数据
a = [
['高小一',18,30000,'北京'],
['高小二',19,40000,'上海'],
['高小五',20,1000,'深圳']
]
内存结构图:
微信搜一搜【梓莘】或扫描下方二维码交个朋友共同进步。文章持续更新中。目前在整理python百战学习笔记,期待后续更多的更新哦。