258 lines
7.3 KiB
Python
258 lines
7.3 KiB
Python
# 列表是什么?
|
||
# 列表 是一个有序、可变的集合,可以存储任意数量、任意类型的元素。
|
||
|
||
# 有序:元素有固定的位置(索引),按添加的顺序排列。
|
||
# 可变:创建后,可以修改列表的内容(增、删、改)。
|
||
# 异构:一个列表中可以包含不同类型的数据(整数、字符串、甚至其他列表)
|
||
|
||
# 创建列表
|
||
# 使用[]
|
||
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]]
|