Python 基础 -- 列表
- 1. 列表定义
- 1.1 访问列表的元素
- 1.2 索引
- 1.3 使用列表中的各个值
- 2. 修改、添加和删除元素
- 2.1 修改列表元素
- 2.2 在列表中添加元素
- 1. 在列表末尾添加元素
- 2. 在列表总插入元素
- 2.3 从列表中删除元素
- 1. 使用 del 语句删除元素
- 2. 使用函数 pop() 删除元素
- 3. 弹出列表中任何位置的元素
- 4. pop() 和 del 的选择
- 5. 根据值删除元素
- 3. 组织列表
- 3.1 使用 sort() 方法对列表进行永久排序
- 3.2 使用 sorted() 方法对列表进行临时排序
- 3.3 倒着打印列表
- 3.4 确定列表长度
- 4. 遍历列表
- 4.1 for 循环
- 5. 创建数字列表
- 5.1 range() 函数
- 5.2 使用 range() 创建数字列表
- 5.3 对数字列表执行简单的统计计算
- 5.4 列表解析
- 6. 使用列表中的一部分
- 6. 1 切片
- 6.2 遍历切片
- 6.3 复制列表
- 7. 元组
- 7.1 元组定义
- 7.2 元组遍历
- 7.3 修改元组变量
1. 列表定义
- 列表是一个可以存储成组信息的地方;
- 列表是由一系列按特定顺序排列的元素组成;
- 列表中可以添加任何成员,包括字母、数字或者家庭成员信息等;
- 列表中的元素可以没有任何关系;
- 鉴于列表通常包含多个元素,所以列表名称一般使用复数表示;
- Python 中列表使用
[]
表示,并用,
来分隔其中的元素; - 如上列表示例,并将其打印输出,但是这种输出含有方括号,这不是让用户看到的格式,下面将介绍如何访问列表元素。
1.1 访问列表的元素
- 列表是有序集合,因此只需将该元素的位置或者索引告诉 Python 即可;
- 访问列表元素,可指出列表名称,再指出元素的索引,并将其放在方括号内;
- 当请求获得列表中的元素时,Python 只返回该元素,而不包括方括号和引号;
- 这种输出结果是整洁、干净的,是用户需要看到的;
- 如果结合
title()
函数,会使得格式更加整洁。
1.2 索引
- 在 Python 中,第一个列表元素的索引是 0,而不是 1,这与列表底层实现有关;
- 在
bicycles
列表中,需要访问第 2 个和第 4 个元素时,索引需要为 1 和 3; - Python 为访问最后一个列表元素提供了一种特殊的语法:
- 索引为
-1
时,将返回最后一个元素; - 索引为
-2
时,将返回倒数第二个元素;
……
1.3 使用列表中的各个值
- 可以像使用变量一样,使用列表中的各个值;
2. 修改、添加和删除元素
- 创建的列表大多数都是动态的,这意味着列表创建后,将随着程序的运行进行元素的增删;
- 例如,创建一个游戏,要求玩家射杀外星人,为此,可以在开始时将一些外星人存储在列表中,然后每当有外星人被杀时,都将其从列表中删除,每次有新外星人出现时,都将其添加在列表中;
2.1 修改列表元素
- 修改列表元素的语法与访问列表元素的语法类似;
- 修改列表元素,可指定列表名和要修改的元素索引,再指定该元素的新值;
- 建立一个
motorcycles
列表,并将第一个元素进行修改,输出表明,只有第一个元素进行了改变,其他都没有改变; - 可以按照以上操作修改任意的元素,并非只能修改第一个;
2.2 在列表中添加元素
1. 在列表末尾添加元素
- 在列表中添加新元素时,最简单的就是将元素附加到列表末尾;
- 使用
append()
函数将元素添加到列表末尾,不会影响列表中其他所有元素; append()
函数也可以动态创建列表;- 先创建一个空列表,通过一系列
append()
函数添加元素
2. 在列表总插入元素
- 使用
insert
函数可以在列表中任何位置添加新元素; - 使用
insert
函数进行添加元素时需要指定新元素的索引和值; - 使用
insert
函数进行添加元素时,添加位置左边的元素索引不变,右边索引统一向后移动一位;
2.3 从列表中删除元素
- 有时候在某些程序中,需要删除列表中的一个或者多个元素;
- 例如一个系统有多个账户,在注销账户时就需要将该账户从活跃账户列表中删除;
1. 使用 del 语句删除元素
- 知道要删除元素在列表中的位置时,可以使用 del 语句进行元素删除;
2. 使用函数 pop() 删除元素
- 有时候将元素从列表中删除后,还需要接着使用它的值;
- 比如,当你将某用户从活跃列表中移除时,就需要将其添加到非活跃用户列表中;
- 函数
pop()
可删除列表末尾的元素,并让你能够接着使用它; - 术语
弹出(pop)
源自这样的类比:列表就像一个栈,而删除列表末尾的元素相当于弹出栈顶元素; - 定义并打印列表
motorcycles
; - 从列表
motorcycles
中弹出末尾元素,并将其存储到变量pop_motorcycles
中; - 打印弹出末尾元素值后的列表,显示,从原列表中删除了最后一个元素;
- 打印弹出的值,证明被弹出的值依旧可以访问;
3. 弹出列表中任何位置的元素
- 使用
pop()
函数删除任何位置的元素时,只需要括号里边指定删除元素的索引;
4. pop() 和 del 的选择
- 当你要从列表中删除一个元素,并且不再以任何方式使用它的时候,选择
del
。 - 当你希望删除后的元素还能继续使用时,选择
pop()
。
5. 根据值删除元素
- 当不知道元素的索引,但是知道元素的值时,可以使用
remove()
方法删除元素; remove()
只删除第一个指定的值。如果需要删除多个重复值,需要使用循环。
3. 组织列表
- 有时候希望列表元素保持最初始的排列顺序;
- 有时候又需要对元素进行排序;
3.1 使用 sort() 方法对列表进行永久排序
sort()
函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数;sort()
函数语法:
list.sort(cmp = None, key = None, reverse = False)
cmp
:可选参数,如果指定了该参数会使用该参数的方法进行排序;key
:用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可选迭代对象中的一个元素来进行排序;reverse
:排序规则,reverse = True
降序,reverse = False
升序(默认);
3.2 使用 sorted() 方法对列表进行临时排序
- 使用
sorted()
函数,既可以保留列表元素原来的排列顺序,同时以特定的顺序呈现它们; - 也可以向函数
sorted()
传递参数reverse = True
。
3.3 倒着打印列表
- 要反转列表元素的排列顺序,可以使用函数
reverse()
; - 函数
reverse()
永久性的改变元素排列顺序,但是可以随时恢复之前的排列顺序; - 函数
reverse()
并不是按照字顺序的相反顺序排列列表元素,只是反转列表元素的排列顺序。
3.4 确定列表长度
- 使用函数
len()
可以获得列表的长度;
4. 遍历列表
- 遍历列表就是对列表中的每一个元素执行相同的操作;
- 在 Python 中可以使用循环来实现;
- 循环就是让计算机自动完成重复工作的常见方式之一;
- 典型代表:
for
循环;
4.1 for 循环
- 语法:
for car in cars:
print(car)
- 注意:
- Python 根据缩进来判断代码行与前一个代码的关系;
- 在 for 循环后面,没有缩进的代码都只执行一次;
- 正常遍历列表:
- 对于列表中的每个名字,Python 都将重复执行 for 循环内容,将所有名字都打印都出来;
- 常见错误 – 忘记缩进
- 常见错误 – 遗漏了冒号
5. 创建数字列表
- 在数据可视化中,处理的几乎都是由数字(如温度、距离和人口数量等)组合成的集合;
- 列表非常适合用于存储数字集合;
5.1 range() 函数
range()
函数可创建一系列数字;- 语法:
range(start, stop, [step])
-
start
:计数从 start 开始,不写就默认为 0;例如, range(5),等价于 range(0, 5)。 -
stop
:计数到 stop 结束,但是不包括 stop,例如,range(0, 5),是[0, 1, 2, 3, 4]。 -
step
:步长,默认为 1。
- Python 2 中
range()
函数返回的是列表: - Python 3 中
range()
函数返回的是一个可迭代的对象,而不是列表类型,所以打印的时候不会打印出列表: list()
函数是对象迭代器,可以把range()
函数返回的可迭代对象转为一个列表,返回的变量类型为列表:
5.2 使用 range() 创建数字列表
- 使用
range()
打印 1~10 内的所有数; - 使用
range()
打印 1~10 内的所有偶数; - 使用
range()
打印 1~10 内的所有数的平方;
5.3 对数字列表执行简单的统计计算
- Python 有几个专门处理简单数字列表的函数;
- 例如,最大值
max
、最小值min
和总和sum
。
5.4 列表解析
- 对于 5.2 节中,使用
range()
打印 1~10 内的所有数的平方,包含三四行代码,颇为繁琐; - 列表解析可以使得只需要一行代码就可以生成这样的列表;
- 列表解析:将 for 循环和创建新元素的代码合并成一行,并自动附加新元素;
- 这种语法定义如下:
- 首先,描述一个列表名,如 squares;
- 然后,指定一个左方括号,并定义一个表达式,用来生成你要存储到列表中的值,如
values ** 2
; - 最后,使用 for 循环,给表达式提供值,再加上右方括号;
- 值得注意的是:列表解析中的 for 循环末尾没有冒号。
6. 使用列表中的一部分
6. 1 切片
- 切片:列表中的部分元素;
- 创建列表切片与
range()
函数类似; - 可指定要使用的第一个元素的索引和最后一个元素的索引加 1;
- 例如,指定索引 0~3,将会输出索引为 0、1 和 2 的元素;
6.2 遍历切片
- 在很多情况下,切片都很有用,例如, web 程序中,可以使用切片来分页显示;
- 通过在 for 循环中使用切片,达到遍历切片的目的:
6.3 复制列表
- 复制列表,可以创建一个包含整个列表的切片;
- 方法是同时省略起始索引和终止索引
([:])
; - 对我们各自喜欢的队员进行追加,结果如下:
- 结果显示,追加成功;
- 在最开始看复制列表这一块,我的第一反应是
friend_players = my_players
这样直接赋值; - 但是在 Python 语法中,意思是将
friend_players
关联到包含在my_players
列表中,因此这两个变量都指向同一个表,添加新信息的时候就会同时出现在两个列表中,演示如下:
7. 元组
7.1 元组定义
- 元组:不可变的列表;
- 元组虽然是不可变的列表,但是不是列表,它是使用圆括号
()
来标识; - 定义后,也可以使用索引来访问;
- 元组是不可以修改的:
7.2 元组遍历
- 像列表一样,元组中的所有值可以用 for 循环来遍历:
7.3 修改元组变量
- 元组虽然不可以直接修改其中的元素,但是可以通过重新赋值来改变元组,即重新定义;