列表是Python当中应用最多的一种数据集合,也是最灵活的序列
它是可变对象,其内容可以进行修改,它与字符串不同的地方在于,字符串表示的是文本信息,所以字符串里面只能存储字符相关的数据,然而对于列表而言,列表中可以存储任意数据类型(数字,字符串,布尔类型,浮点数,函数....),当然为了方便我们对列表进行统一的操作和管理,建议在一个列表中存储相同的数据元素
列表用[]
表示
[1,2,3,4,5,6,7] 纯整数的列表
["哈哈","嘻嘻","啦啦","嘿嘿"] 纯字符串的列表
[1,2,3,3.14,True,False,max,"字符串"] 表示列表可以存储多种数据类型 但是不方便操作
既然列表是序列的一种,那么列表也支持序列的通用的操作
创建列表
>>> lst = [1,2,3,4] # 创建指定元素的列表
>>> print(lst)
[1, 2, 3, 4]
>>> type(lst) # 查看列表对象的类型
<class 'list'>
>>> lst = [None] * 10 # 创建指定长度的列表 暂时没有内容 None
>>> print(lst)
[None, None, None, None, None, None, None, None, None, None]
>>> list("abcd") # 通过内置函数list 将其他的序列转换为列表对象
['a', 'b', 'c', 'd']
>>> list(1234) # 内置函数list 不能将非序列结构转为列表
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> range(1,10,2) # range函数是用来生成一组数据的
range(1, 10, 2)
>>> r = range(1,10,2)
>>> type(r)
<class 'range'>
>>> lst = list(range(1,10,2)) # 通过内置函数list将range函数生成的数据转为List对象
>>> print(lst)
[1, 3, 5, 7, 9]
>>> lst = [] # 创建一个空列表 (长度为0 没有元素)后期给它添加元素
关于列表可变长的问题
在其他语言当中 尤其是Java和C语言,Python的列表就相当于上述两个语言当中的数组这个概念
数组它一旦创建出来其长度是不可改变的,但是Python的列表它的长度是可以改变的(内容也是可以改变的)
列表的一些特殊的操作
修改元素
>>> lst = [1,2,3,4,5]
>>> lst[1] # 通过角标来获取一个元素
2
>>> lst[1] = 6 # 通过角标来修改一个元素
>>> lst
[1, 6, 3, 4, 5]
>>> lst[0:4] = [9,8,7] # 通过切片修改一段元素(被修改的元素个数不一定和新来的元素个数相同)
>>> lst
[9, 8, 7, 5]
删除操作
>>> del lst[0] # 通过角标删除列表中某一个元素
>>> lst
[8, 7, 5]
>>> del lst[0:3] # 通过切片删除列表中一段元素
>>> lst
[]
列表的函数
同字符串一样,列表也拥有自己的函数,调用的方式就是通过某一个列表对象来调用
下面这些方法,如果有添加、修改、调整、删除的操作,都是在列表对象自身上进行的!
列表对象.函数()
-
append(x):将数据对象x添加到列表的末尾
>>> lst = [1,2,3,4]
>>> lst.append(5)
>>> lst
[1, 2, 3, 4, 5]
clear():清空当前列表对象的内容
>>> lst.clear()
>>> lst
[]
copy():复制一份同样的列表(做一个副本列表对象并返回)
>>> lst1 = [1,2,3,4] # 创建列表对象 将列表对象的地址给lst1变量
>>> lst2 = lst1 # 将lst1变量存储的地址给lst2 所以目前为止 lst1和lst2存储的都是同一个对象的地址
>>> id(lst1)
2192471564744
>>> id(lst2)
2192471564744
>>> lst1[0] = 6 # lst1修改列表对象的内容
>>> lst2 # lst2再去访问列表对象时 内容已经被改变了
[6, 2, 3, 4] # lst1和lst2其实就是一个玩意 这个不叫复制
>>> lst2 = lst1.copy() # 将lst1所对应的列表对象进行复制 重新创建新的列表对象 该新的列表对象的内容和原先的列表一致的 并把新列表对象的地址给了lst2
>>> lst2 # lst1和lst2分别指向两个不同的列表对象 只不过这两个列表对象的内容一样而已
[6, 2, 3, 4]
>>> lst1[0] = 666 # 修改lst1列表对象的内容
>>> lst1
[666, 2, 3, 4]
>>> lst2 # 修改lst1并不影响lst2
[6, 2, 3, 4]
count(x):统计x数据在列表中出现的次数
lst =[1,1,1,0,0,0,0,0]
lst.count(0)
5
extend(x):和append函数一样都是添加内容,但是extend函数的参数x必须是序列,将x序列中的内容添加到当前列表中
>>> lst1 = [1,2,3]
>>> lst2 = [4,5,6]
>>> lst1.extend(lst2) # 将lst2的内容添加在lst1的表尾
>>> lst1
[1, 2, 3, 4, 5, 6]
>>> lst1.extend(666) # extend函数的参数必须是一个序列
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> lst1
[1, 2, 3, 4, 5, 6]
>>> lst1.append(lst2) # append是将参数x当成一个元素添加在当前列表的表尾的!
>>> lst1
[1, 2, 3, 4, 5, 6, [4, 5, 6]]
>>> lst1[6] # 注意 [4,5,6]这个列表对象被当做是一个元素在lst1中
[4, 5, 6]
index(x):查找元素x在列表中第一次出现的角标(从左到右),如果找不到则报错!
>>> lst = [1,2,3,4,5,6]
>>> lst.index(6)
5
>>> lst.index(10)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 10 is not in list
pop():当成栈来看,删除最后一个元素,相当于出栈操作,append理解为进栈操作
>>> lst
[1, 2, 3, 8, 4, 5]
>>> lst.pop()
5
>>> lst
[1, 2, 3, 8, 4]
remove(x):删除指定元素x,从左到右第一次出现,如果不存在则报错
>>> lst = [1,2,3,4,4,5,6]
>>> lst.remove(4)
>>> lst
[1, 2, 3, 4, 5, 6]
>>> lst.remove(4)
>>> lst
[1, 2, 3, 5, 6]
>>> lst.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list