Python入门之路-常用语法2 列表、元组

2022-12-16  本文已影响0人  percivals

列表

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.列表新增元素
list1.insert(1,"插入的元素内容")

4.列表删除元素

list1.removeat("需要删除的元素内容")
i = list1.pop(2)
list1.clear()

5.列表修改元素

list1[0] = "修改之后的元素"
list1[1:] = ["元素2","元素3"]

替换元素的长度与切片长度可以不相等,列表长度会随之发生改变

6.列表查找元素

list1.count("指定元素内容")
list1.index("查找的元素内容")

index函数有两个额外的参数值,index(x, start, end), 可以传入查找的起始位置

list1.index("查找的元素内容",10,20)

7.列表复制

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.其他函数

元组

格式为 (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

注意这种方式需要赋值的数量跟对应元组的长度一致

(tuple1,tuple1) // ((1, 2, 3, 4, 5), (1, 2, 3, 4, 5))
[i + 1 for i in tuple1] // [2,3,4,5,6]

会生成一个列表

上一篇下一篇

猜你喜欢

热点阅读