10.2.1 列表中的常用操作符
列表类型是一种抽象数据类型,抽象数据类型定义了数据类型的操作方法。在本节的内容中,着重介绍列表的常用操作符。
列表类型之常用的操作符如下表所示:
10.2.2 []操作符: 索引访问列表
element = list[index]
字符串是一种不可变的数据类型,只能通过索引来读取字符,不能对字符进行修改。
代码实例:
# __desc__ = 字符串不可变 text = "Python" # 可通过索引来访问字符串中的字符 char = text[0] # 不可以通过[]+索引来修改字符串中的字符 text[0]="p" # 抛出异常
而列表是可变的,可以通过索引来修改容器中的元素。Python中的索引分为正索引和负索引。正索引从0开始进行编号,表示数据集合中的第一个元素。负索引从-1开始编号,表示数据集合中的倒数第一个元素。正负索引值必须在有效的范围之内,否则会抛出越界访问的错误信息。
# __desc__ = 通过索引来访问,以及修改列表中的元素 numbers = [1,2,3,4] # 1.读取列表中的第一个元素 first_number = numbers[0] # 2.读取列表中的最后一个元素 last_number = numbers[-1] # 3.修改列表中的第一个元素 numbers[0] = 5 # numbers的输出为[5,2,3,4] # 4.修改列表中的最后一个元素 numbers[-1] = 9 # numbers的输出为[5,2,3,9]Python中的变量实际保存的是内存地址。将列表赋值给其它变量时,实际是将列表的内存地址进行赋值。赋值操作完成以后,对变量进行修改会影响到原来的列表。
# __desc__ = 将列表变量赋值给其它变量 # 定义列表类型变量 numbers = [1,2,3,4] # 将numbers赋值给变量container container = numbers # 赋值操作完成以后,container与numbers指向的是同一个列表 # 通过变量container对列表进行修改 container[0] = 5 # container的输出为[5,2,3,4] ''' 由于numbers与container指向的是同一个列表,所以 numbers的输出也为[5,2,3,4] '''对于上文的代码实例,同学们可以通过下图进行理解。numbers变量保存的是列表在内存中的地址。
将变量numbers赋值给变量container以后,变量container与变量numbers指向的都是同一个列表。
同学们可以在交互模式中进行验证,使用id来输出变量的内存地址:
>>> numbers = [1,2,3,4]
>>> container = numbers
>>> id(numbers)
2890924839944
>>> id(container)
2890924839944
列表的这种赋值特性,又称为浅复制。浅复制是指将内存地址进行拷贝。与浅复制相对的是深复制,深复制会将内存中的数据全部拷贝至新的内存空间。在进行深拷贝以后,不会影响原先的数据对象。在Python中对复合数据类型进行赋值时,执行的都是浅复制。
10.2.3 [:]操作符:列表的切片
new_list = list[:]
# __desc__ = 对列表执行切片操作 # 定义列表类型变量 numbers = [1,2,3,4] container = numbers[0:2] # container的输出为[1,2] container = numbers[:2] # container的输出为[1,2] container = numbers[2:] # container的输出为[3,4] container = numbers[-3:-1] # container的输出为[2,3]
10.2.4 +操作符:列表的加法
new_list = list0 + list1
代码实例:
# __desc__ = 对列表执行加法操作 # 定义变量negative_numbers表示负数 negative_numbers = [-1,-2,-3,-4] # 定义变量 positive_numbers表示正数 positive_numbers = [1,2,3,4] # 定义变量 natural_numbers表示自然数 natural_numbers = negative_numbers + positive_numbers # natural_numbers的输出为[-1,-2,-3,-4,1,2,3,4]
10.2.5 *操作符:列表的乘法
new_list = list * number参数number必须为整型数字。
# __desc__ = 对列表执行乘法操作 numbers = [-1,-2,-3] new_numbers = numbers * 2 # new_numbers的输出为[-1,-2,-3, -1,-2,-3] # *后面的数字小于等于0时,得到的是一个空列表 # empty_numbers = numbers * 0
10.2.6 列表的关系运算
boolean = list0 > list1代码实例:
# __desc__ = 对列表执行乘法操作 left = [1,3,99] right = [2] result = left > right # result的输出为False
列表的关系运算是按序进行比较的,这里的按序比较是从列表的第一个元素开始,逐元素进行比较。
只有在元素值相同,顺序也相同的情况下,两个列表才相等,否则以元素先后的大小关系来确定列表的大小关系。
比如在上文的代码中,虽然列表right只有一个元素,但是right中的首元素大于列表left中的第一个元素。这时Python会直接判定列表right大于列表left,即使列表left后面的元素都比列表right中的元素大。现在通过循环结构来模拟列表的关系运算。
# __desc__ = 通过while循环来模拟列表的关系运算 left = [3,3,3,3,99,3] right = [3,3,3,3,3,109] length_of_left = len(left) length_of_right = len(right) # 计算最短长度 shortest = length_of_left if length_of_left < length_of_right else length_of_right """ (1) ret为0表示两个列表相等 (2) ret为1表示列表left大于列表right (3) ret为-1表示列表left小于列表right """ ret = 0 index = 0 while index < shortest: if left[index] > right[index]: ret = 1 break elif left[index] < right[index]: ret = -1 break index += 1 else: if length_of_left > length_of_right: ret = 1 elif length_of_left < length_of_right: ret = -1
10.2.7 in操作符:查找元素
boolean = element in list表示是否不存在时,需通过逻辑非运算符not:
boolean = element not in list代码实例:
# __desc__ = 通过in操作符来执行元素查找 natural_numbers = [1,2,3,4,5,6,7,8,9] number = 99 if number in natural_numbers: # 如果number存在与列表中,那么表达的输出为True print("{} in numbers:{}".format(number, natural_numbers)) else: print("there is not {} in numbers {}".format(number, natural_numbers))
10.2.8 最具实力的小班培训
薯条老师在广州有开设线下培训班,小班授课模式,一班最多6个人。也可一对一授课,全程帮助你学好计算机,实现高薪就业。不在广州的同学可提供住宿,也可以报名线上小班,用腾讯会议上直播课。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python中高级爬虫逆向工程师就业班,月薪15K-25K,包拿Offer
(3) Python数据分析+商业分析+数据科学就业班,企业级项目实战,月薪10K-20K
(4) Python量化交易就业班,A股+期货+数字货币量化,月薪10K-40K
(5) Python机器学习+深度学习算法工程师,月薪20-50K
跟薯条老师学习的学生有拿到花生日记,林氏家居,南方电网,京东, 阿里等公司的offer, 学生的最低薪资有6K,最高薪资有18K, 平均就业薪资有11000。
扫码咨询薯条老师:
已有6位薯条发表了看法:
访客 评论于 2020-07-30 20:09:26 回复
10.2.7 in操作符的代码最后两个format里的第二个应为natural_numbers
薯条老师 评论于 2020-07-31 11:18:06 回复
谢谢指正
访客 评论于 2021-04-20 09:49:32 回复
# __desc__ = 对列表执行切片操作
# 定义列表类型变量
numbers = [1,2,3,4]
container = numbers[0:2]
# container的输出为[1,2]
container = numbers[:2]
# container的输出为[1,2]
container = numbers[2:]
# container的输出为[3,4]
container = numbers[-3:-1]
# container的输出为[2,4]
切片举例,最后一项有问题,应该输出[2,3]吧
薯条老师 评论于 2021-04-23 17:14:43 回复
已更正,谢谢
访客 评论于 2021-04-20 09:49:57 回复
# __desc__ = 对列表执行切片操作
# 定义列表类型变量
numbers = [1,2,3,4]
container = numbers[0:2]
# container的输出为[1,2]
container = numbers[:2]
# container的输出为[1,2]
container = numbers[2:]
# container的输出为[3,4]
container = numbers[-3:-1]
# container的输出为[2,4]
切片举例,最后一项有问题,应该输出[2,3]吧
薯条老师 评论于 2021-04-23 17:14:47 回复
已更正,谢谢