列表基础
程序一般都需要存储大量的数值。假设,举个例子,需要读取 100 个数字,计算出它们的平均值,然后找出多少个数字是高于这个平均值的。程序首先读取 100 个数字并计算它们的平均值,然后把每个数字和平均值进行比较来确定它是否超过了平均值。为了完成这个任务,这些数字都必须存储在变量内。为了这样做,你必须创建 100 个变量并且重复编写几乎同样的一段代码 100 次。
显然,编写一个这样的程序是不切实际的。因此,这个问题该怎么解决? 我们需要一个高效、条理的方式。Python 提供了一种被称为 列表 的数据类型,它可以 存储一个有序的元素集合。
列表是一个用 list 类定义的序列,包括了创建、操作、处理列表的方法。
创建列表
创建列表的方法有很多,主要分为使用 构造函数 和使用 中括号 两种方法:
- 使用构造函数
list1 = list() # 创建空列表 list2 = list([2,3,4]) # 创建含有元素 2,3,4 的列表 list3 = list(["red","green","blue"]) # 创建字符串列表 list4 = list(range(3,6)) # 创建含有元素 3,4,5 的列表 list5 = list("abcd") # 创建含有元素 'a','b','c','d' 的列表
- 使用中括号
list1 = [] # 相当于 list() 构造函数 list2 = [2,3,4] # 相当于 list([2,3,4]) list3 = ["red","green"] # 相当于 list(["red","green"])
列表是一种序列类型
列表的各种操作及其作用
操作 | 描述 |
---|---|
x in s | 如果元素 x 在序列 s 中则返回 true |
x not in s | 如果元素 x 不在序列 s 中则返回 true |
s1 + s2 | 连接两个序列 s1 和 s2 |
s * n,n * s | n 个序列 s 的连接 |
s[i] | 序列 s 的第 i 个元素 |
s[i:j] | 序列 s 从下标 i 到 j - 1 的片段 |
len(s) | 序列 s 的长度,即 s 中的元素个数 |
min(s) | 序列 s 中的最小元素 |
max(s) | 序列 s 中的最大元素 |
sum(s) | 序列 s 中所有元素之和 |
for loop | 在 for 循环中从左到右反转元素 |
<、<=、>、>=、=、!= | 比较两个序列(按字典序比较) |
列表的解析功能
列表解析提供了一种创建顺序元素列表的简洁方式。一个列表解析由多个方括号组成,方括号内包含后跟一个 for 子句的表达式,之后是 0 或多个 for 或 if 子句。列表解析可以产生一个由表达式求值结果组成的列表。
list1 = [x for x in range(5)] # 返回列表 [0,1,2,3,4]
list2 = [0.5 * x for x in list1] # 返回列表 [0.0,0.5,1.0,1.5,2.0]
list3 = [x for x in list2 if x < 1.5] # 返回列表 [0.0,0.5,1.0]
列表方法
方法名 | 描述 |
---|---|
append(x:object) | 将元素 x 添加到列表结尾 |
count(x:object) | 返回元素 x 在列表中的出现次数 |
extend(1:list) | 将 1 中的所有元素追加到列表中 |
index(x:object) | 返回元素 x 在列表中第一次出现的下标 |
insert(index:int,x:object) | 将元素 x 插入列表中指定下标处 |
pop(i) | 删除给定位置的元素并且返回它。参数 i 是可选的。如果没有指定它,那么删除 list.pop() 并返回列表中的最后一个元素 |
remove(x:object) | 删除列表中第一次出现的 x |
reverse() | 将列表中的所有元素倒序 |
sort() | 以升序对列表中的元素排序 |
将字符串分成列表
除了 list 自带的方法,str 类也提供了返回 list 对象的方法。split() 接受一个列表以及一个被指定的分割符(默认空格)作为输入,产生的字符串列表会按照被指定的分隔符进行分裂:
items = "Jane John Peter Susan".split() # 返回列表 ["Jane", "John", "Peter", "Susan"]
items = "14/11/2024".split("/") # 返回列表 ["14", "11", "2024"]