1. 列表的定义与创建
在 Python 中,列表(List)是一种有序、可变的数据结构,可以存储任意类型的元素。列表使用方括号[]表示,元素之间用逗号分隔。
1.1 创建空列表
# 方法一:使用方括号empty_list1=[]# 方法二:使用 list() 函数empty_list2=list()1.2 创建带初始值的列表
# 包含不同类型元素的列表mixed_list=[1,"hello",3.14,True]# 嵌套列表nested_list=[[1,2],[3,4],[5,6]]# 使用列表推导式创建列表squares=[x**2forxinrange(10)]# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]2. 列表索引
Python 列表支持正向索引和反向索引,索引从 0 开始。
2.1 正向索引
fruits=["apple","banana","cherry","date","elderberry"]print(fruits[0])# 输出: appleprint(fruits[2])# 输出: cherryprint(fruits[4])# 输出: elderberry2.2 反向索引
fruits=["apple","banana","cherry","date","elderberry"]print(fruits[-1])# 输出: elderberry(最后一个元素)print(fruits[-2])# 输出: date(倒数第二个元素)print(fruits[-5])# 输出: apple(第一个元素)2.3 索引越界处理
fruits=["apple","banana","cherry"]try:print(fruits[5])# 索引越界exceptIndexErrorase:print(f"索引错误:{e}")# 输出: 索引错误: list index out of range3. 列表切片
切片操作可以获取列表的子集,语法为list[start:stop:step]。
3.1 基本切片
numbers=[0,1,2,3,4,5,6,7,8,9]# 获取前5个元素print(numbers[0:5])# 输出: [0, 1, 2, 3, 4]print(numbers[:5])# 输出: [0, 1, 2, 3, 4](start默认为0)# 获取第3个到最后一个元素print(numbers[2:])# 输出: [2, 3, 4, 5, 6, 7, 8, 9]# 获取最后3个元素print(numbers[-3:])# 输出: [7, 8, 9]3.2 带步长的切片
numbers=[0,1,2,3,4,5,6,7,8,9]# 每隔一个元素取一个print(numbers[::2])# 输出: [0, 2, 4, 6, 8]# 从索引1开始,每隔两个元素取一个print(numbers[1::2])# 输出: [1, 3, 5, 7, 9]# 反转列表print(numbers[::-1])# 输出: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]3.3 切片创建新列表
original=[1,2,3,4,5]sliced=original[1:4]# [2, 3, 4]# 修改切片不会影响原列表sliced[0]=99print(original)# 输出: [1, 2, 3, 4, 5]print(sliced)# 输出: [99, 3, 4]4. 列表遍历
Python 提供了多种遍历列表的方式。
4.1 使用 for 循环
fruits=["apple","banana","cherry"]# 直接遍历元素forfruitinfruits:print(fruit)# 输出:# apple# banana# cherry4.2 使用 enumerate() 获取索引和值
fruits=["apple","banana","cherry"]forindex,fruitinenumerate(fruits):print(f"索引{index}:{fruit}")# 输出:# 索引 0: apple# 索引 1: banana# 索引 2: cherry# 指定起始索引forindex,fruitinenumerate(fruits,start=1):print(f"第{index}个水果:{fruit}")4.3 使用 range() 和 len()
fruits=["apple","banana","cherry"]foriinrange(len(fruits)):print(f"fruits[{i}] ={fruits[i]}")# 输出:# fruits[0] = apple# fruits[1] = banana# fruits[2] = cherry4.4 使用 while 循环
fruits=["apple","banana","cherry"]i=0whilei<len(fruits):print(fruits[i])i+=14.5 列表推导式遍历
numbers=[1,2,3,4,5]# 对每个元素进行运算squares=[x**2forxinnumbers]# [1, 4, 9, 16, 25]# 带条件的遍历even_squares=[x**2forxinnumbersifx%2==0]# [4, 16]5. 列表常用方法
5.1 添加元素
fruits=["apple","banana"]# append() - 在末尾添加单个元素fruits.append("cherry")print(fruits)# 输出: ['apple', 'banana', 'cherry']# extend() - 在末尾添加多个元素(合并列表)fruits.extend(["date","elderberry"])print(fruits)# 输出: ['apple', 'banana', 'cherry', 'date', 'elderberry']# insert() - 在指定位置插入元素fruits.insert(1,"blueberry")print(fruits)# 输出: ['apple', 'blueberry', 'banana', 'cherry', 'date', 'elderberry']5.2 删除元素
fruits=["apple","banana","cherry","banana","date"]# remove() - 删除第一个匹配的元素fruits.remove("banana")print(fruits)# 输出: ['apple', 'cherry', 'banana', 'date']# pop() - 删除并返回指定位置的元素removed=fruits.pop(1)# 删除索引1的元素print(f"删除的元素:{removed}")# 输出: 删除的元素: cherryprint(fruits)# 输出: ['apple', 'banana', 'date']# pop() 不传参数 - 删除并返回最后一个元素last=fruits.pop()print(f"最后一个元素:{last}")# 输出: 最后一个元素: date# del 语句 - 删除指定位置的元素delfruits[0]print(fruits)# 输出: ['banana']# clear() - 清空列表fruits.clear()print(fruits)# 输出: []5.3 查找和统计
numbers=[1,2,3,4,5,3,2,1]# index() - 返回第一个匹配元素的索引print(numbers.index(3))# 输出: 2print(numbers.index(3,3))# 输出: 5(从索引3开始查找)# count() - 统计元素出现次数print(numbers.count(1))# 输出: 2print(numbers.count(3))# 输出: 2print(numbers.count(10))# 输出: 0(不存在)# in 操作符 - 检查元素是否存在print(3innumbers)# 输出: Trueprint(10innumbers)# 输出: False5.4 排序和反转
numbers=[3,1,4,1,5,9,2]# sort() - 原地排序(修改原列表)numbers.sort()print(numbers)# 输出: [1, 1, 2, 3, 4, 5, 9]# sort() 降序排序numbers.sort(reverse=True)print(numbers)# 输出: [9, 5, 4, 3, 2, 1, 1]# sorted() - 返回新排序列表(不修改原列表)unsorted=[3,1,4,1,5]sorted_list=sorted(unsorted)print(f"原列表:{unsorted}")# 输出: 原列表: [3, 1, 4, 1, 5]print(f"排序后:{sorted_list}")# 输出: 排序后: [1, 1, 3, 4, 5]# reverse() - 原地反转列表numbers=[1,2,3,4,5]numbers.reverse()print(numbers)# 输出: [5, 4, 3, 2, 1]5.5 复制列表
original=[1,2,3,[4,5]]# 浅拷贝 - copy() 或 list() 或切片shallow_copy1=original.copy()shallow_copy2=list(original)shallow_copy3=original[:]# 修改浅拷贝中的嵌套列表会影响原列表shallow_copy1[3][0]=99print(original)# 输出: [1, 2, 3, [99, 5]]print(shallow_copy1)# 输出: [1, 2, 3, [99, 5]]# 深拷贝 - 需要 import copyimportcopy deep_copy=copy.deepcopy(original)deep_copy[3][0]=100print(original)# 输出: [1, 2, 3, [99, 5]]print(deep_copy)# 输出: [1, 2, 3, [100, 5]]5.6 其他常用方法
# len() - 获取列表长度fruits=["apple","banana","cherry"]print(len(fruits))# 输出: 3# max() 和 min() - 获取最大最小值numbers=[3,1,4,1,5,9]print(max(numbers))# 输出: 9print(min(numbers))# 输出: 1# sum() - 求和print(sum(numbers))# 输出: 23# any() 和 all() - 检查元素真假bool_list=[True,False,True]print(any(bool_list))# 输出: True(至少一个为True)print(all(bool_list))# 输出: False(不是所有都为True)6. 列表操作的综合示例
6.1 学生成绩管理系统
# 初始化学生成绩列表grades=[85,92,78,90,88,76,95,82]# 1. 添加新成绩grades.append(87)grades.extend([91,84])# 2. 计算平均分average=sum(grades)/len(grades)print(f"平均分:{average:.2f}")# 3. 找出最高分和最低分print(f"最高分:{max(grades)}")print(f"最低分:{min(grades)}")# 4. 排序成绩sorted_grades=sorted(grades,reverse=True)print(f"成绩排名:{sorted_grades}")# 5. 统计优秀成绩(≥90分)excellent=[gradeforgradeingradesifgrade>=90]print(f"优秀成绩数量:{len(excellent)}")print(f"优秀成绩:{excellent}")6.2 购物车应用
classShoppingCart:def__init__(self):self.items=[]self.prices=[]defadd_item(self,item,price):self.items.append(item)self.prices.append(price)print(f"已添加:{item}- ¥{price}")defremove_item(self,item):ifiteminself.items:index=self.items.index(item)self.items.pop(index)price=self.prices.pop(index)print(f"已移除:{item}- ¥{price}")else:print(f"商品 '{item}' 不在购物车中")defcalculate_total(self):returnsum(self.prices)defshow_cart(self):print("\n购物车内容:")fori,(item,price)inenumerate(zip(self.items,self.prices),1):print(f"{i}.{item}- ¥{price}")print(f"总计: ¥{self.calculate_total()}")# 使用示例cart=ShoppingCart()cart.add_item("苹果",5.0)cart.add_item("香蕉",3.0)cart.add_item("牛奶",8.5)cart.show_cart()cart.remove_item("香蕉")cart.show_cart()7. 总结
Python 列表是编程中最常用的数据结构之一,掌握其基本操作对于高效编程至关重要:
- 定义灵活:可以存储不同类型的数据,支持嵌套
- 索引直观:支持正向和反向索引,访问元素快速
- 切片强大:可以方便地获取子列表,支持步长参数
- 遍历多样:支持多种遍历方式,包括 for 循环、enumerate 等
- 方法丰富:提供了添加、删除、查找、排序等完整的方法集
列表的易用性和灵活性使其成为 Python 数据处理的核心工具。在实际开发中,结合列表推导式、内置函数和切片操作,可以写出既简洁又高效的代码。
建议读者通过实际练习来巩固这些知识,尝试用列表解决实际问题,如数据处理、算法实现等,从而更好地掌握 Python 列表的强大功能。