注册 登录
Python基础教程

第一章: 环境搭建,安装Python

第二章: 挑选一款趁手的IDE

第三章: 计算机基础知识

第四章: 命令行基础知识

第五章: 从全局把握Python

第六章: Python语言基础

第七章: Python流程控制

第八章: Python数据类型与运算

第九章: Python字符串类型

第十章: Python列表类型

第十一章: Python元祖类型

第十二章: Python字典类型

第十三章: Python集合类型

第十四章: Python函数处理

第十五章: Python文件处理

第十六章: Python面向对象

第十七章: Python异常处理

第十八章: Python模块处理

第十九章: Python项目实战

首页 > Python基础教程 > 第十章: Python列表类型 > 10.2节:列表的操作符

10.2节:列表的操作符

薯条老师 2020-05-05 14:52:06 205198 6

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师的线下Python,Java小班周末班已经开课了,培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Java后端开发。授课详情请点击:http://chipscoco.com/?cate=6

10.2.1 列表中的常用操作符

列表类型是一种抽象数据类型,抽象数据类型定义了数据类型的操作方法,在本节的内容中,着重介绍通过操作符来对列表进行操作。

image.png

列表类型常用的操作符如下表所示:

image.png

10.2.2 []操作符: 索引访问列表

在9.2节的内容中介绍了如何通过索引来访问字符串中的字符。列表类型也是一种线性的序列结构,同字符串一样,可以通过索引来访问列表中的元素。

操作语法:
element = list[index]
字符串是一种静态的数据类型,只能通过索引来读取字符,不能对字符进行修改。而列表类型可以通过索引来对元素进行修改。

Python中的索引分为正索引和负索引。正索引从0开始进行编号,表示数据集合中的第一个元素。负索引从-1开始编号,表示数据集合中的倒数第一个元素。正负索引值必须在有效的范围之内,否则会抛出越界访问的错误信息。对此不熟悉的同学,可以复习9.2节中的内容。

代码实例:

# __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变量保存的是列表在内存中的地址。

image.png



将变量numbers赋值给变量container以后,变量container与变量numbers指向的都是同一个列表。

image.png

同学们可以在交互模式中进行验证,使用id来输出变量的内存地址:

>>> numbers = [1,2,3,4]
>>> container = numbers
>>> id(numbers)
2890924839944
>>> id(container)
2890924839944

列表的这种赋值特性,又称为浅复制。浅复制是指将内存地址进行拷贝。与浅复制相对的是深复制,深复制会将内存中的数据全部拷贝至新的内存空间。在进行深拷贝以后,不会影响原先的数据对象。在Python中对复合数据类型进行赋值时,执行的都是浅复制。

10.2.3  [:]操作符:列表的切片

切边操作语法同字符串的切片操作。对此不是很熟悉的同学,请复习9.2节中的内容。对列表执行切片操作的以后,返回的是一个新的列表。
操作语法:
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]

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操作符:查找元素

使用 "in" 操作符来判断元素是否存在于列表中,若存在返回值为布尔类型True,否则返回False。
操作语法:
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 知识要点

(1)列表类型是一种线性的序列结构,可以通过索引来访问列表中的元素。
(2)字符串是一种静态的数据类型,只能通过索引来读取字符,不能对字符进行修改。列表类型可以通过索引来对元素进行修改。
(3)Python中的变量保存的是内存地址。将列表赋值给其它变量时,实际是将列表的内存地址进行赋值。赋值操作完成以后,对变量进行修改会影响到原先的列表。
(4)在Python中对复合数据类型进行赋值,执行的都是浅复制。
(5)列表的关系运算是按序进行比较的,这里的按序比较是从列表的第一个元素开始,逐元素进行比较。只有在元素值相同,顺序也相同的情况下,两个列表才相等,否则以元素先后的大小关系来确定列表的大小关系。

10.2.9 高薪就业班

(1) Python后端工程师高薪就业班,月薪10K-15K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪10K-20K, 免费领取课程大纲
(4) Python大数据工程师就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取学习资料:



已有6位薯条发表了看法:

  • 访客

    访客  评论于 2020-07-30 20:09:26  回复

    10.2.7 in操作符的代码最后两个format里的第二个应为natural_numbers

  • 访客

    访客  评论于 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-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]吧

欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录