python基础学习-03(列表)
·
1、列表(List)是什么?
列表是Python中常用的数据结构之一,它是一个有序、可变的集合,可以存储任意类型的数据。
核心特性对比
| 特性 | 列表(List) | 字符串(String) |
|---|---|---|
| 可变性 | 可变(可修改) | 不可变 |
| 元素类型 | 任意类型混合 | 只能是字符 |
| 创建方式 | []或list() | ""或str() |
| 常用操作 | 增删改查、排序 | 查找、替换、分割 |
列表的基础操作
| 操作 | 语法 | 说明 |
|---|---|---|
| 创建 | my_list = [1, 2, 3] | 方括号创建 |
| 索引 | my_list[0] | 获取第一个元素(从0开始) |
| 切片 | my_list[1:3] | 获取第2到第3个元素 |
| 长度 | len(my_list) | 获取元素个数 |
2、代码示例
def test():
# 示例1:创建和访问列表
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
print("水果列表:", fruits)
print("第一个水果:", fruits[0])
print("最后一个水果:", fruits[-1]) # 负数索引从末尾开始
print("前两个水果:", fruits[:2])
print("列表长度:", len(fruits))
# 示例2:修改列表元素
fruits[1] = "芒果" # 修改第二个元素
print("修改后的列表:", fruits)
# 示例3:增加元素
fruits.append("西瓜") # 末尾添加
print("增加后的列表:", fruits)
fruits.insert(1, "草莓")
print("插入后的列表:", fruits)
# 示例4:删除元素
removed = fruits.pop() # 删除并返回最后一个元素
print(f"删除了:{removed}, 剩余:{fruits}")
fruits.remove("芒果") # 删除指定元素
print("删除芒果后:", fruits)
# 示例5:扩展列表
more_fruits = ["菠萝", "桃子"]
fruits.extend(more_fruits) # 合并列表
print("扩展后:", fruits)
# 示例6:遍历列表
print("\n遍历水果列表:")
for fruit in fruits:
print(f"- {fruit}")
# 带索引的遍历
print("\n带索引的遍历:")
for i, fruit in enumerate(fruits):
print(f"{i}. {fruit}")
# 示例7:排序
numbers = [3, 2, 1, 5, 6, 7, 0]
numbers.sort() # 升序排序
print("升序排序:", numbers)
numbers.sort(reverse=True) # 降序排序
print("降序排序:", numbers)
# 示例8:列表推导式
squares = [x**2 for x in range(1, 6)]
print("1-5的平方:", squares)
# 此处为AI补充说明
print("\n=== 列表推导式详解 ===")
print("语法结构: [表达式 for 变量 in 可迭代对象 if 条件]")
print("执行过程:")
print("1. 遍历可迭代对象(如 range(1, 6))")
print("2. 将每个元素赋值给变量(x)")
print("3. 计算表达式(x**2)")
print("4. 将结果收集到新列表中")
print("5. 可选:通过 if 条件过滤元素")
print("\n与普通循环对比:")
print("- 普通循环: 需要先创建空列表,再循环添加")
print("- 列表推导式: 一行代码完成,更简洁高效")
print("- 示例对比:")
print(" 普通循环:")
print(" squares = []")
print(" for x in range(1, 6):")
print(" squares.append(x**2)")
print(" 列表推导式:")
print(" squares = [x**2 for x in range(1, 6)]")
# 更多实用的列表推导式示例
print("\n=== 更多列表推导式示例 ===")
# 示例8.1:条件过滤
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print("1-10中偶数的平方:", even_squares)
print("说明: 只计算偶数的平方,if x % 2 == 0 过滤奇数")
# 示例8.2:嵌套推导式(二维列表展开)
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print("二维矩阵展开为一维:", flattened)
print("说明: 外层循环遍历行,内层循环遍历每行的元素")
# 示例8.3:带条件的复杂推导式
words = ["apple", "banana", "cherry", "date", "elderberry"]
long_words = [word.upper() for word in words if len(word) > 5]
print("长度大于5的单词转大写:", long_words)
print("说明: 先过滤长度>5的单词,再转换为大写")
# 示例8.4:字典推导式(扩展知识)
numbers = [1, 2, 3, 4, 5]
square_dict = {x: x**2 for x in numbers}
print("数字到平方的字典:", square_dict)
print("说明: 字典推导式语法类似,用花括号和键值对")
# 示例9:嵌套列表(列表中的列表)
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print("\n嵌套列表(矩阵):")
for row in matrix:
print(row)
print("第二行第三列:", matrix[1][2]) # 访问6
if __name__ == '__main__':
test()
3、练习题
基础操作
创建一个购物清单,包含:牛奶、面包、鸡蛋、苹果。然后:
- 在"面包"后面插入"黄油"
- 删除"牛奶"
- 在末尾添加"咖啡"
- 打印最终购物清单和总商品数量
def test():
# 创建清单列表
shopping_list = ["牛奶", "面包", "鸡蛋", "苹果"]
# 面包后面插入黄油
bread_index = shopping_list.index("面包")
shopping_list.insert(bread_index + 1, "黄油")
# 删除牛奶
shopping_list.remove("牛奶")
# 在末尾添加咖啡
shopping_list.append("咖啡")
# 打印最终购物清单和商品总数
print("购物清单:", shopping_list)
print("商品数量:", len(shopping_list))
if __name__ == '__main__':
test()
成绩统计
给定学生成绩列表:
[85, 92, 78, 90, 88, 95, 76, 85]
- 计算平均分
- 找出最高分和最低分
- 统计有多少人成绩在90分以上
- 将成绩从高到低排序并打印
def test():
# 给定学生成绩列表
grades = [85, 92, 78, 90, 88, 95, 76, 85]
# 计算平均分
average = sum(grades) / len(grades)
print("平均分:", average)
# 找出最高分和最低分
max_grade = max(grades)
min_grade = min(grades)
print(f"最高分:{max_grade}, 最低分:{min_grade}")
# 统计有多少人成绩在90分以上
high_grades = [grade for grade in grades if grade >= 90]
print(f"90分以上的人数:{len(high_grades)}")
# 将成绩从高到低排序并打印
sorted_grades = sorted(grades, reverse=True)
print("成绩从高到低:", sorted_grades)
if __name__ == '__main__':
test()
矩阵转置
给定一个3×3矩阵:
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
编写代码实现矩阵转置(行列互换),输出结果应为:
[
[1, 4, 7],
[2, 5, 8],
[3, 6, 9]
]
def test():
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 方法1:使用嵌套循环
transposed = []
for i in range(len(matrix[0])): # 遍历列数
new_row = []
for row in matrix: # 遍历行
new_row.append(row[i])
transposed.append(new_row)
print("转置矩阵(方法1):")
for row in transposed:
print(row)
# 方法2:使用列表推导式
transposed2 = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print("\n转置矩阵(方法2):")
for row in transposed2:
print(row)
if __name__ == '__main__':
test()
补充知识:
- 内存效率:列表在内存中是连续存储的,当列表很大时,频繁的插入/删除操作(特别是开头)效率较低
- 浅拷贝与深拷贝:
list2 = list1只是创建引用,修改list2会影响list1;使用list2 = list1.copy()或list2 = list1[:]创建独立副本 - 性能对比:
append():O(1),在末尾添加很快insert(0, x):O(n),在开头添加较慢(需要移动所有元素)in操作:O(n),需要遍历查找
更多推荐
所有评论(0)