列表
1.列表
格式为[a,b,c,d],可以存放不同类型的数据
访问指定元素以arr[index]格式, 如果想要访问最后一位元素,可以通过
list1[len(list1)-1]
也可以通过
list1[-1]
同理倒数第二个是list1[-2]
2.列表切片
通过list[startIndex:endIndex]语法,可以获取指定范围的列表切片,不包括结束点位:
list1[1:3]
如果从起始点位开始或者结束点位结束,可以省略对应的下标:
list1[:3]
list1[3:]
list1[:]
注意,冒号不能省略
此外,还可以设置列表跨度步进值:
list1[1:6:2]
代表从第一个元素开始,获取下一个元素的跨度为2,到第六个元素结束,即1,3,5
由此,可以使用list1[::-1]来获取数组的倒序
3.列表新增元素
-
使用append函数,添加单个元素到末尾
list1.append("第六个元素")
-
使用extend函数,添加多个元素到末尾
extend函数可以添加一个可迭代对象list1.extend([7,8])
以上写法也可以用切片来完成
list1[len(list1):] = [7,8]
与上面的extend写法是等价的关系
-
使用insert函数,插入单个元素到指定下标位置
list1.insert(1,"插入的元素内容")
4.列表删除元素
- remove函数
可以移除指定元素
如果包含多个相同的元素,只会删除第一个
如果列表中并不存在该元素,会报错
list1.removeat("需要删除的元素内容")
- pop函数
可以移除指定下标位置的元素,并返回该元素
i = list1.pop(2)
- clear函数,用于清空列表
list1.clear()
5.列表修改元素
- 通过指定下标可以修改元素
注意,不可以越界,超出数组本身长度会报错
list1[0] = "修改之后的元素"
- 通过切片方式也可以完成元素的替换,并且可以替换多个元素
list1[1:] = ["元素2","元素3"]
替换元素的长度与切片长度可以不相等,列表长度会随之发生改变
6.列表查找元素
- count函数,用于查找元素在列表中出现的次数
list1.count("指定元素内容")
- index函数,查找某个元素在列表中的索引值
如果有多个相同的元素,只会返回第一个的下标值
list1.index("查找的元素内容")
index函数有两个额外的参数值,index(x, start, end), 可以传入查找的起始位置
list1.index("查找的元素内容",10,20)
7.列表复制
- copy
使用copy函数可以复制一份相同的列表
list2 = list1.copy()
使用copy时,会对列表进行浅拷贝,列表具有不同的地址,列表内的元素仍然是地址拷贝
list1 = [1,2,3]
list2 = list1.copy()
list2[0] = 3
list1 // [1, 2, 3]
list2 // [3, 2, 3]
当对copy出来的列表list2进行修改赋值,list1保持原来的值
但是如果对list2列表内的元素进行修改赋值,list1内的元素也对应修改
list1 = [[0,1,2],[1,2,3],[2,3,4]]
list2 = list1.copy()
list2[0][0] = 3
list2 // [[3, 1, 2], [1, 2, 3], [2, 3, 4]]
list1 // [[3, 1, 2], [1, 2, 3], [2, 3, 4]]
因为copy浅拷贝是对列表外层对象进行拷贝,如果包含嵌套对象,只会拷贝其引用
使用深拷贝可以解决这个问题
深拷贝,需要先引入copy模块
import copy
copy.copy(list1) // 浅拷贝
copy.deepcopy(list1) // 深拷贝
深拷贝会对对象及对象内的子元素进行拷贝
- 使用切片进行实现
list3 = list2[:]
效果与上述的一致
8.列表拼接
可以使用+、*等运算符对列表进行拼接
list1 = [1,2,3]
list2 = [4,5,6]
list3 = list1+list2 // [1,2,3,4,5,6]
list4 = list1 * 3 // [1,2,3,1,2,3,1,2,3]
通过*进行的拷贝是地址拷贝,此时修改一个列表,另外的列表也会发生修改
9.列表推导式
使用语法糖对列表进行处理以生成一个新的列表,效率较高
格式:[表达式 + for循环语句]
如:[i * 2 for i in list1]
list1 = [i * 2 for i in range(3)] // [0, 2, 4]
列表推导式后面可以添加一个筛选句
格式:[表达式 + for循环语句 + 筛选语句]
如:
[ i * 2 for i in range(3) if i < 2] // [0, 2]
列表推导式中,循环语句使用嵌套写法
格式: [表达式 + for循环语句1 + for 循环语句2 + ... + for循环语句n]
如:
list1 = [[0,1,2],[1,2,3],[2,3,4]]
[i for firstRow in list1 for i in firstRow] // [0, 1, 2, 1, 2, 3, 2, 3, 4]
同理,每个for语句后面都可以添加一个筛选语句
格式: [表达式 + for循环语句1 + 筛选语句1 + for 循环语句2 + 筛选语句2 + ... + for循环语句n + 筛选语句n]
10.其他函数
- 排序 sort函数、reverse函数
通过sort函数可以实现列表的排序,reverse函数实现倒序
元组
格式为 (a, b, c, d, e), 其中()可以去掉,即a, b, c, d, e。像列表一样可以容纳多个不同类型的对象,
元组数据是不可变的(但是如果元组内存放的是可变类型,比如列表,该数据是可以修改的)
- 取值
可以通过下标进行取值, 但是元组数据不可变,无法通过下标来修改值
tuple1 = (1,2,3,4,5)
tuple1[0] // 1
也可以像列表一样通过切片来取值
tuple1[1:3] // (2, 3)
还可以通过赋值方式来进行取值
tuple1 = (1,2,3)
(x, y, z) = tuple1
x // 1
y // 2
z // 3
注意这种方式需要赋值的数量跟对应元组的长度一致
-
count函数、index函数、+、*
同列表的用法一致 -
嵌套
元组内可以嵌套元组
(tuple1,tuple1) // ((1, 2, 3, 4, 5), (1, 2, 3, 4, 5))
- 列表推导式
元组也支持列表推导式语法
[i + 1 for i in tuple1] // [2,3,4,5,6]
会生成一个列表
网友评论