# 列表是什么? # 列表 是一个有序、可变的集合,可以存储任意数量、任意类型的元素。 # 有序:元素有固定的位置(索引),按添加的顺序排列。 # 可变:创建后,可以修改列表的内容(增、删、改)。 # 异构:一个列表中可以包含不同类型的数据(整数、字符串、甚至其他列表) # 创建列表 # 使用[] empty_list = [] print(empty_list) number = [1, 2, 3, 4] mixed = [1, True, "hello"] print(number) print(mixed) # 使用list()构造函数 # 创建列表除了用方括号 [],也可以用内置的 list() 函数。 # list() 可以将其他可迭代对象(如字符串、元组、字典、集合等)转换为列表。 # 如果传入一个字符串,每个字符会成为列表中的一个元素。 # 如果传入一个元组,列表会包含元组中的元素。 # 如果不传参数,会得到一个空列表。 # 字符串 list_from_string = list("abc") print(list_from_string) # ['a', 'b', 'c'] # 元组 list_from_tuple = list((1, 2, 3)) print(list_from_tuple) # [1, 2, 3] # 不传 list_from_empty = list() print(list_from_empty) # [] # 访问列表元素(索引和切片) # 索引访问 从0开始 list_number = [1, 2, 3] print(list_number[0]) # 1 print(list_number[-1]) # 3 # print(list_number[100]) # IndexError: list index out of range # 切片访问 # 切片用于获取列表的一个子集,语法:list[start:stop:step] # 注意:会创建新列表,不会修改原列表 # start:起始索引(包含) # stop:结束索引(不包含) # step:步长(默认为1) numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8] print(numbers[2:5]) # [2, 3, 4] print(numbers[:5]) # [0, 1, 2, 3, 4] print(numbers[5:]) # [ 5, 6, 7, 8] print(numbers[::2]) # [0, 2, 4, 6, 8] print(numbers[::-1]) # [8, 7, 6, 5, 4, 3, 2, 1, 0] 反转列表 new_numer = numbers[1:4] print(new_numer) # [1,2,3] # 操作 # 修改元素 fruits = ["apple", "banana", "cherry"] fruits[0] = "pick" print(fruits) # ["pick", "banana", "cherry"] # 添加元素 # append(x) # 在列表末尾添加一个元素x # insert(index,x) # 在指定位置 index 插入元素 x,原有及后续元素后移。 # extend(iterable) # 将另一个可迭代对象(如列表、元组等)的元素逐个添加到列表末尾。 # 注意: # append() 是把一个元素作为整体添加到末尾 # extend() 是把所有元素分别添加到原列表 # append a = [1, 2] a.append([3, 4]) print(a) # [1, 2, [3, 4]] 会把[3,4] 作为一个整体添加到列表中 b = [1, 2] b.extend([3, 4]) print(b) # [1, 2, 3, 4] 将[3,4]分别添加到列表中 c = [1, 2] c.insert(1, 3) print(c) # [1, 3, 2] 往指定位置添加 # 删除 # 在操作列表时,常常需要删除其中的元素。Python 提供了多种删除列表元素的方法,主要包括: # remove(x) 方法 # 用于删除列表中第一个值为 x 的元素(如果没有这样的元素会抛出 ValueError)。 # 只会删除找到的第一个匹配项。 # 语法:list.remove(x) # pop([index]) 方法 # 用于删除并返回给定索引处的元素。如果没有指定索引,默认删除并返回最后一个元素。 # 如果索引越界会抛出 IndexError。 # 语法:list.pop() 或 list.pop(index) # del 语句 # del 可以根据索引删除列表的指定元素,也可以一次性删除多个元素(切片)。 # 语法:del list[index] 或 del list[start:end] # clear() 方法 # 清空整个列表,变成空列表 []。 # 语法:list.clear() # - remove() 删除第一个匹配的元素 fruits = ["apple", "banana", "cherry", "banana", "date"] fruits.remove("banana") print(fruits) # ['apple', 'cherry', 'banana', 'date'] # - pop() - 删除指定索引的元素并返回指定索引(默认删除最后一个) fruits.pop() print(fruits) # ['apple', 'cherry', 'banana'] fruits.pop(2) print(fruits) # ['apple', 'cherry'] # - del(index) 按照索引删除 del fruits[0] print(fruits) # ['cherry'] # - clear() 清空数组 fruits.clear() print(fruits) # [] # 其他操作 # 拼接:用加号 + 可以合并两个或多个列表,形成一个新列表,不改变原列表。 # 重复:用乘号 * 可以将列表重复多次,得到新列表。 # 成员测试:使用 in 或 not in 快速判断某个元素是否存在于列表中,结果为布尔值。 # 获取长度:len(lst) 得到列表中的元素数量。 list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = list1 + list2 print(list3) # [1, 2, 3, 4, 5, 6] list4 = [7, 8] list5 = list4 * 2 print(list5) # [7, 8, 7, 8] # 检查元素是否存在 list6 = [9, 10, 11] print(12 in list6) # False # 获取列表长度 print(len(list6)) # 3 # sorce()排序 numbers = [3, 1, 4, 1, 5, 9, 2, 6] numbers.sort() print(numbers) # [1, 1, 2, 3, 4, 5, 6, 9] # reverse()反转 numbers.reverse() print(numbers) # [9, 6, 5, 4, 3, 2, 1, 1] # 查找索引index print(numbers.index(9)) # 0 # count() 计数 print(numbers.count(1)) # 2 # copy() 复制 numbers_copy = numbers.copy() # 等价于 # numbers_copy = numbers[:] # numbers_copy = list[numbers] # 列表遍历 # 直接遍历元素 fruits = ["apple", "banana", "cherry"] for fruit in fruits: print(fruit) # 遍历索引和元素 # 使用 enumerate 可以在遍历列表时同时获得每个元素的索引和值。 for index, fruit in enumerate(fruits): print(f"索引{index}的值是{fruit}") # 列表推导式 # 列表推导式(List Comprehensions)是 Python 提供的一种简洁优雅的构造新列表的方法。它既可以替代传统的 for 循环,也可以在创建列表时加入条件判断,让表达更加简明 # 语法 # new_list = [表达式 for 变量 in list] # 等同于 # new_list = [] # for 变量 in list: # new_list.append(表达式) # 可以添加条件的列表推导式 # new_list = [表达式 for 变量 in list if 条件] # 示例 # 生成偶数数字的平方根 num = [1, 2, 3, 4] new_num = [n**2 for n in num if n % 2 == 0] print(new_num) # [4, 16] # 列表推到常用来构建,转换,筛选列表 # 构建 squares = [n**2 for n in range(5)] print(squares) # [0, 1, 4, 9, 16] # 转换 fruits = ["Apple", "Banana", "cherry"] low_list = [f.lower() for f in fruits] print(low_list) # ['apple', 'banana', 'cherry'] # 筛选 num = [1, 2, 3, 4] new_num = [n**2 for n in num if n % 2 == 0] print(new_num) # [4, 16] # 多维列表 # 2x3 矩阵(二维列表) matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 访问元素 print(matrix[0]) # [1, 2, 3] - 第一行 print(matrix[1][2]) # 6 - 第二行第三列 # 遍历二维列表 for row in matrix: for element in row: print(element, end=" ") print() # 换行 # 输出: # 1 2 3 # 4 5 6 # 7 8 9 # 注意 # 深,浅拷贝 # 浅拷贝(shallow copy)和深拷贝(deep copy)是列表复制时的两个概念,尤其是在涉及多维列表(嵌套列表)时需要特别注意。 # 浅拷贝:只复制最外层的列表对象,内部的子对象依然引用原来的地址。常用 list.copy()、切片[:] 或 list() 实现。 # 深拷贝:不仅复制最外层列表,也递归复制所有子对象,互不影响。需要用 copy.deepcopy()(需 import copy)。 # 浅拷贝 a = [[1, 2], [3, 4]] b = a.copy() b[1].append(5) print(a) # [1, 2], [3, 4, 5]] print(b) # [1, 2], [3, 4, 5]] # 深拷贝 import copy c = [[1, 2], [3, 4]] d = copy.deepcopy(c) d[1].append(5) print(c) # [[1, 2], [3, 4]] print(d) # [[1, 2], [3, 4, 5]]