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]]  

发表回复

登录... 后才能评论