### 序列相加
在 Python 中,支持两种**相同类型**的序列相加操作。即将两个序列进行连接,使用加(+)运算符实现。例如,将两个列表相加,可以使用下面的代码:
nba1 = [“史蒂芬.库里”,“克莱.汤普森”,“马努.吉诺比利”,“凯文.杜兰特”]
nba2 = [“迈克尔.乔丹”,“比尔.拉塞尔”,“卡里姆阿卜杜勒.贾巴尔”,“威尔特.张伯伦”,
“埃尔文.约翰逊”,“科比.布菜恩特”,“蒂姆.邓肯”,“勒布朗詹姆斯”,“拉里.伯德”,
“沙奎尔.奥尼尔”]
print (nba1 + nba2)
>
> 在进行序列相加时,相同类型的序列是指,同为列表、元组或集合等,序列中的元素类型可以不同。
>
>
>
### 乘法
在 Python 中,使用数字 n 乘以一个序列会生成新的序列。新序列的内容为原来序列被重复 n 次的结果。例如,下面的代码,将实现将一个序列乘以 3 生成一个新的序列并输出,从而达到 “重要事情说三遍” 的效果。
phone = [“华为”,“小米”,“OPPE”,“VIVO”]
print(phone * 3)
在进行序列的乘法运算时,还可以实现初始化指定长度列表的功能。例如下面的代码,将创建一个长度为 5 的列表,列表的每个元素都是 None,表示什么都没有。
emptylist = [None] * 5
print(emptylist)
### 检查某个元素是否是序列的成员(元素)
在 Python 中,可以使用 `in` 关键字检查某个元素是否是序列的成员,即检查某个元素是否包含在该序列中,也可以使用 `not in` 关键字实现检查某个元素是否不包含在指定的序列中。示例代码如下:
nba = [“史蒂芬.库里”,“克莱.汤普森”,“马努.吉诺比利”,“凯文.杜兰特”]
print(“凯文.杜兰特” in nba) # 将显示 True,表示在序列中存在指定的元素
print(“凯文.杜兰特” not in nba) # 将显示 False,表示在序列中并非不存在指定的元素
### 计算序列的长度、最大值和最小值
在 Python 中,提供了内置函数计算序列的长度、最大值和最小值。分别是:使用 `len()` 函数计算序列的长度,即返回序列包含多少个元素;使用 `max()` 函数返回序列中的最大元素;使用 `min()` 函数返回序列中的最小元素。示例代码如下:
num = [2,8,9,4,5]
print(len(num))
print(max(num))
print(min(num))
除了上面介绍的 3 个内置函数,Python 还提供了下表所示的内置函数:
| 函数 | 作用 |
| --- | --- |
| list() | 将序列转换为列表 |
| str() | 将序列转换为字符串 |
| sum() | 计算元素和 |
| sorted() | 对元素进行排序 |
| reversed() | 反向序列中的元素 |
| enumerate() | 将序列组合为一个索引序列,多用在 for 循环中 |
## 列表(list)
列表是 Python 中最常用的数据结构之一,它是一个有序的、可变的序列。在形式上,列表的所有元素都放在一对中括号 “[]” 中,两个相邻元素间使用逗号 “,” 分隔。在内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放入到列表中,并且同一个列表中,元素的类型可以不同,因为它们之间没有任何关系。
### 列表的创建和删除
在 Python 中提供了多种创建列表的方法,下面分别进行介绍。
1. 使用赋值运算符直接创建列表
同其他类型的 Python 变量一样,创建列表时,也可以使用赋值运算符 “=” 直接将一个列表赋值给变量,示例代码如下:
num = [2,8,9,4,5]
python = [‘优雅’,‘明确’,‘简单’]
mixed = [‘Python’,28,“人生苦短,我用Python”,[“爬虫”,“自动化运维”,“云计算”,“Web开发”]]
2. 创建空列表
在 Python 中,也可以创建空列表,例如,要创建一个名称为 emptylist 的空列表,可以使用下面的代码:
emptylist = []
3. 创建数值列表
在 Python 中,数值列表很常用。可以使用 `list()` 函数直接将 `range()` 函数循环出来的结果转换为列表。例如,创建一个 10~20 之间(不包括20)所有偶数的列表,可以使用下面的代码:
datalist = list(range(10,20,2))
4. 删除列表
对于已经创建的列表,不再使用时,可以使用 del 语句将其删除(在实际开发时,并不常用。因为 Python 自带的垃圾回收机制会自动销毁不用的列表,所以即使我们不手动将其删除,Python 也会自动将其回收)。
python = [‘优雅’,‘明确’,‘简单’]
del python
### 访问列表元素
使用索引即可访问列表中指定元素:
mixed = [‘Python’,28,“人生苦短,我用Python”,[“爬虫”,“自动化运维”,“云计算”,“Web开发”]]
print(mixed) # 在输出列表时,是包括左右两侧的中括号的
print(mixed[1])
print(mixed[2]) # 在输出单个列表元素时,不包括中括号,如果是字符串,不包括左右的引号
print(mixed[:3]) # 输出第 1 个到第 3 个列表元素
### 遍历列表
遍历列表中的所有元素是常用的一种操作,在遍历的过程中可以完成查询、处理等功能。下面介绍两种常用的方法:
1. 直接使用 for 循环实现
直接使用 for 循环遍历列表,只能输出元素的值,示例代码如下:
nba = [‘圣安东尼马刺’,‘洛杉矶湖人’,‘金州勇士’,‘休斯顿火箭’]
print(‘2022年NBA四强:’)
for item in nba:
print(item)
2. 使用 for 循环和 `enumerate()` 函数实现
使用 for 循环和 `enumerate()` 函数可以实现同时输出索引值和元素内容的功能,示例代码如下:
nba = [‘圣安东尼马刺’,‘洛杉矶湖人’,‘金州勇士’,‘休斯顿火箭’]
print(‘2022年NBA四强:’)
for index,item in enumerate(nba):
print(index+1,item)
### 添加、修改和删除列表元素
添加、修改和删除列表元素也称为更新列表。在实际开发时,经常需要对列表进行更新。下面我们就分别介绍如何实现列表元素的添加、修改和删除:
1. 添加元素:
phone = [“华为”,“小米”,“OPPE”,“VIVO”]
phone.append(“iPhone”) # 列表对象的 append() 方法用于在列表的末尾追加元素
print(phone)
phone.insert(1,“荣耀”) # 除了使用 append() 向列表中添加元素,还可以使用 insert() 向指定位置插入元素
print(phone)
newphone = [“三星”,“1+”]
phone.extend(newphone) # 列表对象的 extend() 方法可以将一个列表的全部元素添加到另一个列表中
print(phone)
2. 修改元素
phone = [‘华为’, ‘荣耀’, ‘OPPO’, ‘OPPE’, ‘VIVO’, ‘iPhone’, ‘三星’, ‘1+’]
phone[3] = “OPPO” # 修改列表中的元素只需要通过索引获取该元素,然后再为其重新赋值即可
print(phone)
3. 删除元素
phone = [‘华为’, ‘荣耀’, ‘OPPO’, ‘OPPE’, ‘VIVO’, ‘iPhone’, ‘三星’, ‘1+’]
del phone[3] # 根据索引删除
print(phone)
phone.remove(“1+”) # 根据元素值移除第一个匹配项
print(phone)
使用 `remove()` 方法删除元素前,最好先判断该元素是否存在,如果指定的元素不存在,将出现异常:
phone = [‘华为’, ‘荣耀’, ‘OPPO’, ‘OPPE’, ‘VIVO’, ‘iPhone’, ‘三星’, ‘1+’]
value = ‘1+’
if phone.count(value)>0: # 判断要删除的元素是否存在
phone.remove(value) # 移除指定的元素
print(phone)
### 对列表进行统计计算
Python 的列表提供了内置的一些函数来实现统计、计算方面的功能。如列表对象的 `count()` 方法可以获取指定元素在列表中的出现次数,列表对象的 `index()` 方法可以获取指定元素在列表中首次出现的位置(即索引),`sum()` 函数用于统计数值列表中各元素的和。
phone = [“华为”,“小米”,“OPPE”,“VIVO”]
phone.count(‘小米’) # 获取指定元素出现的次数
phone.index(‘小米’) # 获取指定元素首次出现的下标
grade = [98,99,97,100,100,96,94,89,95,100] # 10 名学生 Python 理论成绩列表
total = sum(grade) # 计算总成绩
print(“Python 理论总成绩为:”,total)
### 对列表进行排序
在实际开发时,经常需要对列表进行排序。Python 中提供了两种常用的对列表进行排序的方法:使用列表对象的 `sort()` 方法和使用内置的 `sorted()` 函数。
grade = [98,99,87,84,100,95] # 使用列表对象的 sort() 方法实现
grade.sort(key = None,reverse = False)
print(grade)
grade_as = sorted(grade,reverse = True) # 使用内置的 sorted() 函数
print(grade_as)
参数说明:
* key:表示指定一个从每个列表元素中提取一个用于比较的键(例如,设置 “key = str.lower” 表示在排序时不区分字母大小写)。
* reverse:可选参数,如果将其值指定为 True,则表示降序排列;如果为 False,则表示升序排列。默认为升序排列。
>
> 列表对象的 `sort()` 方法和内置 `sorted()` 函数的作用基本相同,所不同的就是使用 `sort()` 方法时,会改变原列表的元素排列顺序,而使用 `sorted()` 函数时,会建立一个原列表的副本,该副本为排序后的列表。
>
>
>
### 列表推导式
使用列表推导式可以快速生成一个列表, 或者根据某个列表生成满足指定需求的列表。列表推导式通常有以下几种常用的语法格式。
生成指定范围的数值列表,如生一个包括 10 个随机数的列表,要求数的范围在 10-100 之间
import random # 导入 random 标准库
randomnumber = [random.randint(10,100) for i in range(10)]
print(“生成的随机数为:”,randomnumber)
根据列表生成指定需求的列表
x = list(range(0,10,1))
y = [int(var**2 + 5*var + 5) for var in x]
print(y)
从列表中选择符合条件的元素组成新的列表
price = [1200,5330,2988,6200,1998,8888]
sale = [x for x in price if x>5000]
print(“原列表:”,price)
print(“价格高于5000的:”,sale)
## 元组(tuple)
元组是 Python 中另一个常见的数据结构,与列表相似,但是它是不可变序列。因此,元组也可以称为不可变的列表。在形式上,元组的所有元素都放在一对 “()” 中,两个相邻元素间使用逗号 “,” 分隔。在内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放入到元组中,并且在同一个元组中,元素的类型可以不同,因为它们之间没有任何关系。通常情况下,元组用于保存程序中不可修改的内容。
### 元组的创建和删除
在 Python 中提供了多种创建元组的方法,下面分别进行介绍。
1. 使用赋值运算符直接创建元组
同其他类型的 Python 变量一样,创建元组时,也可以使用赋值运算符 “=” 直接将一个元组赋值给变量,示例代码如下:
num = (7,14,21,28,35,42)
team = (‘马刺’,‘火箭’,‘勇士’,‘湖人’)
2. 创建空元组
在 Python 中,也可以创建空元组,例如,要创建一个名称为 emptytuple 的空元组,可以使用下面的代码:
emptytuple = ()
3. 创建数值元组
在 Python 中,可以使用 `tuple()` 函数直接将 `range()` 函数循环出来的结果转换为数值元组。例如,创建一个 10~20 之间(不包括20)所有偶数的元组,可以使用下面的代码:
tuple(range(10,20,2))
4. 删除元组
对于已经创建的元组,不再使用时,可以使用 del 语句将其删除(在实际开发时,并不常用。因为 Python 自带的垃圾回收机制会自动销毁不用的元组,所以即使我们不手动将其删除,Python 也会自动将其回收)。
python = (‘优雅’,‘明确’,‘简单’)
del python
### 访问元组元素
使用索引即可访问元组中指定元素:
mixed = (‘Python’,28,“人生苦短,我用Python”,[“爬虫”,“自动化运维”,“云计算”,“Web开发”])
print(mixed) # 在输出元组时,是包括左右两侧的小括号的
print(mixed[1])
print(mixed[2]) # 在输出单个元组元素时,不包括小括号,如果是字符串,不包括左右的引号
print(mixed[:3]) # 输出第 1 个到第 3 个元组元素
### 遍历元组
同列表一样,元组也可以使用 for 循环进行遍历。
### 修改元组元素
元组是不可变序列,所以不能对它的单个元素值进行修改。但是元组也不是完全不能修改。我们可以对元组进行重新赋值。例如,下面的代码是允许的:
country = (‘中国’,‘美国’,‘日本’,‘韩国’,‘英国’)
country = (‘中国’,‘法国’,‘日本’,‘韩国’,‘英国’)
print(country) # 对元组重新幅值
另外,还可以对元组进行连接组合。例如,可以使用下面的代码实现在已经存在的元组结尾处添加一个新元组。
country = (‘中国’,‘法国’,‘日本’,‘韩国’,‘英国’)
country2 = (‘俄罗斯’,‘印度’)
print(country + country2)
country3 = (‘美国’,)
print(country + country2 + country3) # 进行元组连接
>
> 如果要连接的元组只有一个元素时,一定不要忘记后面的逗号
>
>
>
### 元组推导式
使用元组推导式可以快速生成一个元组,它的表现形式和列表推导式类似,只是将列表推导式中的中括号 “[]” 修改为小括号 “()"。
生成指定范围的数值元组,如生一个包括 10 个随机数的元组,要求数的范围在 10-100 之间
import random # 导入 random 标准库
randomnumber = (random.randint(10,100) for i in range(10))
print(“生成的随机数为:”,randomnumber)
根据元组生成指定需求的元组
x = tuple(range(0,10,1))
y = (int(var**2 + 5*var + 5) for var in x)
print(y)
从元组中选择符合条件的元素组成新的元组
price = (1200,5330,2988,6200,1998,8888)
sale = (x for x in price if x>5000)
print(“原列表:”,price)
print(“价格高于5000的:”,sale)
执行结构如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/8a3380f5caf741b8b23c334ef348d343.png#pic_center)
从上面的执行结果中,可以看出使用元组推导式生成的结果并不是一个元组或者列表,而是一个生成器对象,这一点和列表推导式是不同的,需要使用该生成器对象可以将其转换为元组或者列表。其中,转换为元组需要使用 `tuple()` 函数,而转换为列表则需要使用 `list()` 函数。
因此,可将代码改写如下:
生成指定范围的数值元组,如生一个包括 10 个随机数的元组,要求数的范围在 10-100 之间
import random # 导入 random 标准库
randomnumber = (random.randint(10,100) for i in range(10))
randomnumber = tuple(randomnumber)
print(“生成的随机数为:”,randomnumber)
根据元组生成指定需求的元组
x = tuple(range(0,10,1))
y = (int(var**2 + 5*var + 5) for var in x)
y = tuple(y)
print(y)
从元组中选择符合条件的元素组成新的元组
price = (1200,5330,2988,6200,1998,8888)
sale = (x for x in price if x>5000)
sale = tuple(sale)
print(“原列表:”,price)
print(“价格高于5000的:”,sale)
要使用通过元组推导器生成的生成器对象,还可以直接通过 for 循环遍历或者直接使用 `__ next()__`方法进行遍历。
例如,通过生成器推导式生成一个包含 3 个元素的生成器对象 number,然后调用 3 次 `__next()__` 方法输出每个元素,再将生成器对 number 转换为元组输出,代码如下:
number = (i for i in range(3))
print(number.next()) # 输出第 1 个元素
print(number.next()) # 输出第 2 个元素
print(number.next()) # 输出第 3 个元素
number = tuple(number) # 转换为元组
print(“转换后:”,number)
执行结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/ce4a9a67b35b44eb97fd2868edd567e9.png#pic_center)
再如,通过生成器推导式生成一个包括 4 个元素的生成器对象 number,然后应用 for 循环遍历该生成器对象,并输出每一个元素的值,最后再将其转换为元组输出,代码如下:
number = (i for i in range(4)) # 生成生成器对象
for i in number: # 遍历生成器对象
print(i,end = " ") # 输出每个元素的值
print(tuple(number)) # 转换为元组输出
执行结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/68b4f54b960e4bac8739ca749e0828a7.png#pic_center)
从上面的两个示例中可以看出,无论通过哪种方法遍历后,如果再想使用该生成器对象,都必须重新创建一个生成器对象,因为遍历后原生成器对象已经不存在了。
## 元组和列表的区别
1. 列表属于可变序列,它的元素可随意修改或删除;而元组属于不可变序列,其中的元素不可以修改,除非整体替换
2. 列表可以使用 `append()`,`extend()`,`insert()`,`remove()`,`pop()` 等方法实现添加和修改列表元素;而元组则没有这几个方法,因为不能向元组中添加和修改元素,同样也不能删除元素