Python列表及元组
一、什么是列表?
- 列表是由一系列按
特定顺序
排列 元素组成。 - 在Python中,用方括号(
[ ]
)来表示列表
,并用逗号
来分隔
其中的元素。
1.1、访问列表元素:
-
列表是
有序集合
,因此要访问列表的任何元素,只需将该元素的位置
或索引
告诉Python即可。color = ['red', 'green', 'blue', 'black'] print(color[0]) # 输出结果 red
-
当你请求获取
列表元素时
,Python只返回该元素
,而不包括方括号
和引号
。 -
返回的是一个字符串类型, 这时候就可以用
title()
方法:color = ['red', 'green', 'blue', 'black'] print(color[0].title()) # 输出结果: Red
-
1.2、索引从0而不是1开始:
-
在Python中,第一个
列表元素的索引为0
,而不是1
。color = ['red', 'green', 'blue', 'black'] print(color[0]) print(color[3]) # 输出结果: red black
-
Python为访问
最后一个列表元素
提供了一种特殊语法。通过将索引指定为-1
。color = ['red', 'green', 'blue', 'black'] print(color[-1]) # 输出结果: black
- 这种语法很有用,
因为你经常需要在不知道列表长度的情况下访问最后的元素
。这种约定也适用于其他负数索引
,例如,索引-2
返回倒数第二个列表元素
,索引-3
返回倒数第三个列表元素
,以此类推。
- 这种语法很有用,
1.3、使用列表中各个值:
-
可像使用其他
变量
一样使用列表中的各个值。color = ['red', 'green', 'blue', 'black'] message = "My like " + color[0].title() print(message) # 输出结果: My like Red
二、修改、添加和删除元素:
- 你创建的大多数列表都将是
动态的
,这意味着列表创建后,将随着程序的运行增删元素
。- 比如:你创建一个游戏,要求玩家射杀从天而降的外星人;为此,可在开始时将一些外星人存储在列表中,然后每当有外星人被
射杀时
,都将其从列表中删除
,而每次有新的外星人出现
在屏幕上时,都将其添加到列表中
。在整个游戏运行期间,外星人列表的长度
将不断变化
。
- 比如:你创建一个游戏,要求玩家射杀从天而降的外星人;为此,可在开始时将一些外星人存储在列表中,然后每当有外星人被
2.1、修改列表元素:
-
要修改列表元素,可指定
列表名
和要修改的元素的索引
,再指定该元素的新值
。color = ['red', 'green', 'blue', 'black'] color[0] = 'pink' print(color) # 输出结果: [u'pink', u'green', u'blue', u'black']
- 可以看出, 第一个索引对应的值变了,其它的没有改变。
2.2、再列表中添加元素:
1:在列表末尾
添加元素:
-
使用方法
append()
,就可以实现最简单方式将元素附加到列表末尾。color = ['red', 'green', 'blue', 'black'] color.append('pink') # append()方法没有返回值 print(color) # 输出结果: [u'red', u'green', u'blue', u'black', u'pink']
-
方法append()
让动态地创建列表易如反掌。-
例如,你可以先创建一个空列表,再使用一系列的append() 语句添加元素:
color = [] color.append('red') color.append('green') color.append('blue') color.append('pink') print(color) # 输出结果:[u'red', u'green', u'blue', u'pink']
-
2:在列表中
插入元素:
-
使用方法
insert() 方法
可在列表的任何位置添加新元素,你需要指定新元素的索引
和值
:colors = ['red', 'green', 'blue'] colors.insert(1, 'black') print(colors) # 输出结果: [u'red', u'black', u'green', u'blue']
insert(1,'black')
方法: 1就是新元素的在列表中索引的位置,'black’就是值。- 这种操作将列表中既有的每个元素都右移一个位置(不包括’red’, 因为它的索引是0,'black’在它的后面)。
2.3、在列表中删除
元素:
1:使用del语句删除元素
-
如果要知道要删除的元素在列表中的位置,可使用
del
语句:colors = ['red', 'green', 'blue'] del colors[1] # 使用del 语句 删除colors 列表索引为1的元素 print(colors) # 输出结果:[u'red', u'blue']
- 使用del 可删除任何位置处的列表元素,条件是
知道其索引
。 - 使用del 语句将值从列表中删除后,你就
无法再访问它了
。
- 使用del 可删除任何位置处的列表元素,条件是
2:使用方法pop()删除元素
:
-
方法
pop() 可删除列表末尾
的元素,并让你能够接着使用它。列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素。
colors = ['red', 'green', 'blue', 'pink'] print(colors) color = colors.pop() # 我们从这个列表中弹出一个值,并将其存储到变量color print(colors) # 我们打印这个列表,以核实从其中删除了一个值 print(color) # 我们打印弹出的值,以证明我们依然能够访问被删除的值 # 输出结果: """ [u'red', u'green', u'blue', u'pink'] [u'red', u'green', u'blue'] pink """
3:弹出列表中任何位置处的元素
:
-
可以使用
pop()
来删除列表中任何位置的元素
。colors = ['red', 'green', 'blue', 'pink'] color = colors.pop(1) # pop()括号内是列表中的索引位置 print(colors) print(color) # 输出结果如下: [u'red', u'blue', u'pink'] green
- 别忘了,每当你使用pop() 时,被弹出的元素就不再在列表中了。
-
如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del 语句;如果你要在删除元素后还能继续使用它,就使用方法pop() 。
4:根据值
删除元素:
-
如果你只知道要
删除的元素的值
,可使用方法remove()
。colors = ['red', 'green', 'blue', 'pink'] colors.remove('red') print(colors) # 输出结果 [u'green', u'blue', u'pink']
-
使用
remove()
从列表中删除元素时,也可接着使用它的值
。colors = ['red', 'green', 'blue', 'pink'] print(colors) red_color = 'red' # 将要删除的值,赋值给一个变量 no_red = colors.remove(red_color) # 删除这个变量 remove()是没有返回值的 print(no_red) #输出结果None print(colors) message = 'My like {}'.format(red_color) # 不过这个值还在变量中 print(message) # 输出结果: [u'red', u'green', u'blue', u'pink'] [u'green', u'blue', u'pink'] My like red
-
注意:方法remove() 只删除第一个指定的值。
三、组织列表:
3.1、使用方法Sort()
对列表进行永久性排序:
-
Python
方法sort()
让你能够较为轻松地对列表进行排序。colors = ['red', 'green', 'blue', 'black', 'pink'] colors.sort() print(colors) # 输出结果: [u'black', u'blue', u'green', u'pink', u'red'] # 是按字母进行排序
-
还可以按与字母顺序
相反的顺序排列列表元素
,为此,只需向sort() 方法传递参数reverse=True
。colors = ['red', 'green', 'blue', 'black', 'pink'] colors.sort(reverse=True) print(colors) # 输出结果: [u'red', u'pink', u'green', u'blue', u'black']
-
列表元素排列顺序的修改是永久性的
3.2、使用函数sorted()
对列表进行临时排序:
-
函数sorted()
让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序
。colors = ['red', 'green', 'blue', 'black', 'pink'] print(colors) # 按照列表显示顺序 print(sorted(colors)) # 在按字母进行排序显示顺序 print(colors) # 特定顺序显示列表后,我们进行核实,确认列表元素的排列顺序与以前相同 # 输出结果: [u'red', u'green', u'blue', u'black', u'pink'] [u'black', u'blue', u'green', u'pink', u'red'] [u'red', u'green', u'blue', u'black', u'pink']
- 注意:
调用函数sorted() 后,列表元素的排列顺序并没有变。
- 如果你要按与字母顺序相反的顺序显示列表,也可向
函数sorted() 传递参数reverse=True
。
- 注意:
3.3、倒着打印列表:
-
要
反转
列表元素的排列顺序
,可使用方法reverse()
colors = ['red', 'green', 'blue', 'black', 'pink'] colors.reverse() print(colors) # 输出结果:[u'pink', u'black', u'blue', u'green', u'red']
-
注意,reverse() 不是指按与字母顺序相反的顺序排列列表元素,而只是
反转列表元素的排列顺序
。 -
方法reverse() 永久性地修改列表元素的排列顺序
,但可随时恢复到原来的排列顺序,为此只需对列表再次调用reverse() 即可。
colors = ['red', 'green', 'blue', 'black', 'pink'] colors.reverse() colors.reverse() print(colors) # 输出结果:[u'red', u'green', u'blue', u'black', u'pink']
-
3.4、确定列表的长度:
-
用
函数len()
可快速获悉列表的长度colors = ['red', 'green', 'blue', 'black', 'pink'] print(len(colors)) # 5
-
如何对列表进行永久性排序
方法sort()
,以及如何为展示列表而进行临时排序函数sorted()
。
四、操作列表:
4.1、遍历整个列表(for循环)
:
-
你经常需要遍历
列表的所有元素
,对每个元素
执行相同的操作
。colors = ['red', 'green', 'blue', 'black', 'pink'] # 定义一个列表 for color in colors: #定义一个for 循环 print(color) # 对列表中每个名字,python都将重复执行 # 输出结果如下: red green blue black pink
4.1.1、列表循环:
-
循环这种概念很重要,因为它是让
计算机自动完成重复工作的常见方式之一
。colors = ['red', 'green', 'blue', 'black', 'pink'] # Python 会首先读取第一行代码 for color in colors: # 第一个值'red' 存储到变量 color中,读取下一行代码, 下一行的时候读取的是'green', 鉴于该列表还包括其他的值, print(color) # 对列表中每个名字,python都将重复执行
- 在这个过程中,
for 循环后面没有其他的代码
,因此程序就此结束。
- 在这个过程中,
4.1.2、再for循环中执行更多的操作:
-
在for 循环中,可对
每个元素执行任何操作
。colors = ['red', 'green', 'blue', 'black', 'pink'] for color in colors: print('My like {}'.format(color).title() + ', too') # 输出结果如下: My Like Red, too My Like Green, too My Like Blue, too My Like Black, too My Like Pink, too
- 每个缩进的代码行都是循环的一部分,且将针对列表中的每个值都执行一次。因此,可对列表中的每个值执行任意次数的操作。
- 在for 循环中,想包含多少行代码都可以。
4.1.3、再for循环结束后执行一些操作:
-
下面将print()打印放到跟for循环并列的行中。
colors = ['red', 'green', 'blue', 'black', 'pink'] for color in colors: print('My like {}'.format(color).title() + ', too') print('finish') # 输出结果如下: My Like Red, too My Like Green, too My Like Blue, too My Like Black, too My Like Pink, too finish
- 可以看出,再for循环结束后,程序会继续往下走。
4.2、避免缩进错误:
4.2.1、忘记缩进:
-
对于位于for 语句后面且属于循环组成部分的代码行,一定要缩进。如果你忘记缩进,Python会提醒你:
colors = ['red', 'green', 'blue', 'black', 'pink'] for color in colors: print('My like {}'.format(color).title() + ', too') # 会提示你错误信息: File "C:/Users/lh9/PycharmProjects/request/my_test01.py", line 138 print('My like {}'.format(color).title() + ', too') ^ IndentationError: expected an indented block
- 通常,将
紧跟在for 语句后面的代码行缩进
,可消除这种缩进错误。
- 通常,将
4.3、创建数值列表:
4.3.1、使用函数range():
-
Python
函数range()
让你能够轻松地生成一系列的数字
。for value in range(1, 5): print(value) # 输出结果如下: 1 2 3 4
- 函数range() 让Python从你指定的
第一个值开始数
,并在到达你指定的第二个值后停止
,因此输出不包含第二个值
(这里为5)。
- 函数range() 让Python从你指定的
4.3.2、使用range()创建数字列表:
-
要创建
数字列表
,可使用函数list() 将range()
的结果直接转换为列表。numbers = list(range(1, 5)) print(numbers) # 输出结果:[1, 2, 3, 4]
-
使用range()时,还可以
指定步长
:numbers = list(range(2, 11, 2)) print(numbers) # 输出结果如下: 打印2~10的 偶数 [2, 4, 6, 8, 10]
-
使用
函数range()
几乎能够创建任何需要的数字集
squares = [] # 首先创建一个空列表 for value in range(1, 11): # 然后循环数值 1, 10 square = value**2 # value的平方 squares.append(square) # 依次加入列表中 print(squares) # 打印列表中的结果 # 输出结果:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] # 还可以简写为: squares = [] for value in range(1, 11): squares.append(value**2) print(squares) # 得到的结果跟上面是一样的
4.3.3、对数字列表执行简单的统计计算:
-
数字列表的
最大值max()
、最小值min()
和总和sum()
。digits = [0, 11, 22, 33, 44, 11, 22, 33, 100] print(max(digits)) print(min(digits)) print(sum(digits)) # 输出结果如下 100 0 276
4.3.4、列表解析:
-
常说的列表推到式:
squares = [value**2 for value in range(1, 11)] print(squares) # 输出结果: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
- 在这个示例中,表达式为
value**2 ,它计算平方值
。 - 接下来,编写一个for 循环,用于给表达式提供值,再加上右方括号。在这个示例中,
for 循环为for value in range(1,11)
,它将值1~10提供给表达式value**2
- 请注意,这里的for 语句末尾没有冒号。
- 在这个示例中,表达式为
4.4、使用列表的一部分:
- 处理列表的部分元素——
Python称之为切片
4.4.1 切片:
-
要创建切片,可指定要使用的
第一个元素
和最后一个元素的索引
\ -
与函数range() 一样,Python在到达你
指定的第二个索引前面的元素后停止
。 -
要输出列表中的
前三个元素
,需要指定索引0~3
,这将输出分别为0 、1 和2
的元素。colors = ['red', 'green', 'blue', 'pink', 'black', 'yellow'] print(colors[0:3]) # 该列表有一个切片, 切的是前三位, 0,1,2 不包括3, 所以去列表中取0,1,2的索引 # 输出结果:[u'red', u'green', u'blue']
-
要输出列表中
1~3的元素
colors = ['red', 'green', 'blue', 'pink', 'black', 'yellow'] print(colors[1:4]) # 输出结果:[u'green', u'blue', u'pink']
-
如果没有指定
第一个索引,Python将自动从列表开头开始
colors = ['red', 'green', 'blue', 'pink', 'black', 'yellow'] print(colors[:4]) # 输出结果:[u'red', u'green', u'blue', u'pink']
-
提取从
第3个元素到列表末尾
的所有元素colors = ['red', 'green', 'blue', 'pink', 'black', 'yellow'] print(colors[3:]) # 输出结果:[u'pink', u'black', u'yellow']
-
负数索引
返回离列表末尾相应距离的元素
colors = ['red', 'green', 'blue', 'pink', 'black', 'yellow'] print(colors[-3:]) # 输出结果:[u'pink', u'black', u'yellow']
4.4.2、遍历切片:
-
遍历列表的部分元素,可在
for 循环
中使用切片
colors = ['red', 'green', 'blue', 'pink', 'black', 'yellow'] for color in colors[:3]: print(color) # 输出结果如下: red green blue
4.4.3、复制列表:
-
要复制列表,可创建一个包含整个列表的切片,
方法是同时省略起始索引和终止索引([:] )
colors = ['red', 'green', 'blue', 'pink', 'black', 'yellow'] # 1.首先创建了一个colors列表 my_colors = colors[:] #2.再不指定任何索引的情况下,从列表colors中提取切片, 创建了my_colors, 通过变量传递给了my_colors print(colors) print(my_colors) # 输出结果如下: [u'red', u'green', u'blue', u'pink', u'black', u'yellow'] [u'red', u'green', u'blue', u'pink', u'black', u'yellow']
-
核实我们确实是2个列表, 而不是一个列表
colors = ['red', 'green', 'blue', 'pink', 'black', 'yellow'] my_colors = colors[:] colors.append('white') my_colors.append('orange') print(colors) print(my_colors) #输出结果如下: [u'red', u'green', u'blue', u'pink', u'black', u'yellow', u'white'] [u'red', u'green', u'blue', u'pink', u'black', u'yellow', u'orange']
-
下面演示不使用切片的情况下,进行列表的复制
colors = ['red', 'green', 'blue', 'pink', 'black', 'yellow'] my_colors = colors #1.colors赋值给了my_colors, 而不是将colors副本给了my_colors # 这种语法是python 将新变量my_colors关联到包含再colors中, 因此两个变量都指向同一个列表 colors.append('white') my_colors.append('orange') print(colors) print(my_colors) # 输出结果如下: [u'red', u'green', u'blue', u'pink', u'black', u'yellow', u'white', u'orange'] [u'red', u'green', u'blue', u'pink', u'black', u'yellow', u'white', u'orange']
五、 元组操作:
- Python将不能修改的值称为不可变的 ,而
不可变的列表被称为元组
5.1、定义元组:
-
元组看起来犹如列表,但使用
圆括号而不是方括号
来标识。定义元组后,就可以使用索引
来访问其元素,就像访问列表元素一样。my_tuple = (0, 100) # 首先定义了元组, 使用的是()括号, print(my_tuple[0]) # 接下来使用[0]索引来获取各个元素, 跟列表是一样的 print(my_tuple[1]) # 输出结果如下: 0 100
-
接下来,
修改元组中的元素
my_tuple = (0, 100) my_tuple[0] = 50 print(my_tuple) # 会出现如下错误信息: Traceback (most recent call last): File "C:/Users/lh9/PycharmProjects/request/my_test01.py", line 177, in <module> my_tuple[0] = 50 TypeError: 'tuple' object does not support item assignment
- 修改第一个元素的值,导致Python返回类型错误消息。
- 由于试图
修改元组的操作是被禁止的
,因此Python指出不能给元组的元素赋值
5.2、遍历元组中所有的值:
-
像列表一样,也可以使用
for 循环
来遍历元组中的所有值my_tuple = (0, 100) for value in my_tuple: print(value) # 输出结果如下: 0 100
5.3、修改元组的变量:
-
虽然不能修改元组的元素,但
可以给存储元组的变量赋值
my_tuple = (0, 100) for value in my_tuple: print(value) my_tuple = (200, 300) for value in my_tuple: print(value) # 输出结果如下: 0 100 200 300
- 如果需要存储的一组值在程序的整个生命周期内都不变,可使用元组。