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、练习题

基础操作

创建一个购物清单,包含:牛奶、面包、鸡蛋、苹果。然后:

  1. 在"面包"后面插入"黄油"
  2. 删除"牛奶"
  3. 在末尾添加"咖啡"
  4. 打印最终购物清单和总商品数量
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]

  1. 计算平均分
  2. 找出最高分和最低分
  3. 统计有多少人成绩在90分以上
  4. 将成绩从高到低排序并打印
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),需要遍历查找

更多推荐