8. 列表(list)
- 列表是一种无序的、可重复的数据序列,可以随时添加、删除其中的元素。
- 列表页的每个元素都分配一个数字索引,从 0 开始
- 列表使用方括号创建,使用逗号分隔元素
- 列表元素值可以是任意类型,包括变量
- 使用方括号对列表进行元素访问、切片、修改、删除等操作,开闭合区间为[)形式
- 列表的元素访问可以嵌套
- 方括号内可以是任意表达式
8.1 创建列表
hello = (1, 2, 3)
li = [1, "2", [3, 'a'], (1, 3), hello]
8.2 访问元素
li = [1, "2", [3, 'a'], (1, 3)]
print(li[3]) # (1, 3)
print(li[-2]) # [3, 'a']
8.3 切片访问
格式: list_name[begin:end:step] begin 表示起始位置(默认为0),end 表示结束位置(默认为最后一个元素),step 表示步长(默认为1)
hello = (1, 2, 3)
li = [1, "2", [3, 'a'], (1, 3), hello]
print(li) # [1, '2', [3, 'a'], (1, 3), (1, 2, 3)]
print(li[1:2]) # ['2']
print(li[:2]) # [1, '2']
print(li[:]) # [1, '2', [3, 'a'], (1, 3), (1, 2, 3)]
print(li[2:]) # [[3, 'a'], (1, 3), (1, 2, 3)]
print(li[1:-1:2]) # ['2', (1, 3)]
8.4 访问内嵌 list 的元素:
li = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ['a', 'b', 'c']]
print(li[1:-1:2][1:3]) # (3, 5)
print(li[-1][1:3]) # ['b', 'c']
print(li[-1][1]) # b
8.5 修改列表
通过使用方括号,可以非常灵活的对列表的元素进行修改、替换、删除等操作。
li = [0, 1, 2, 3, 4, 5]
li[len(li) - 2] = 22 # 修改 [0, 1, 2, 22, 4, 5]
li[3] = 33 # 修改 [0, 1, 2, 33, 4, 5]
li[1:-1] = [9, 9] # 替换 [0, 9, 9, 5]
li[1:-1] = [] # 删除 [0, 5]
8.6 删除元素
可以用 del 语句来删除列表的指定范围的元素。
li = [0, 1, 2, 3, 4, 5]
del li[3] # [0, 1, 2, 4, 5]
del li[2:-1] # [0, 1, 5]
8.7 列表操作符
- + 用于合并列表
- * 用于重复列表元素
- in 用于判断元素是否存在于列表中
- for … in … 用于遍历列表元素
[1, 2, 3] + [3, 4, 5] # [1, 2, 3, 3, 4, 5]
[1, 2, 3] * 2 # [1, 2, 3, 1, 2, 3]
3 in [1, 2, 3] # True
for x in [1, 2, 3]: print(x) # 1 2 3
8.8 列表函数
- len(list) 列表元素个数
- max(list) 列表元素中的最大值
- min(list) 列表元素中的最小值
- list(seq) 将元组转换为列表
li = [0, 1, 5]
max(li) # 5
len(li) # 3
注: 对列表使用 max/min 函数,2.x 中对元素值类型无要求,3.x 则要求元素值类型必须一致。
8.9 列表方法
方法 | 描述 |
---|---|
list.append(obj) | 在列表末尾添加新的对象 |
list.count(obj) | 返回元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值 |
list.index(obj) | 返回查找对象的索引位置,如果没有找到对象则抛出异常 |
list.insert(index, obj) | 将指定对象插入列表的指定位置 |
list.pop([index=-1]]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向排序列表的元素 |
list.sort(cmp=None, key=None, reverse=False) | 对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数 |
list.clear() | 清空列表 还可以使用 del list[:]、li = [] 等方式实现 |
list.copy() | 复制列表 默认使用等号赋值给另一个变量,实际上是引用列表变量。如果要实现 |
8.10 列表推导式
列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。
每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。
将列表中每个数值乘三,获得一个新的列表:
vec = [2, 4, 6]
[(x, x**2) for x in vec]
# [(2, 4), (4, 16), (6, 36)]
对序列里每一个元素逐个调用某方法:
freshfruit = [' banana', ' loganberry ', 'passion fruit ']
[weapon.strip() for weapon in freshfruit]
# ['banana', 'loganberry', 'passion fruit']
用 if 子句作为过滤器:
vec = [2, 4, 6]
[3*x for x in vec if x > 3]
# [12, 18]
vec1 = [2, 4, 6]
vec2 = [4, 3, -9]
[x*y for x in vec1 for y in vec2]
# [8, 6, -18, 16, 12, -36, 24, 18, -54]
[vec1[i]*vec2[i] for i in range(len(vec1))]
# [8, 12, -54]
列表嵌套解析:
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
new_matrix = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print(new_matrix)
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。