python中的列表

在刷算法题时,Python 的列表(list)是非常常用的数据结构。列表的操作灵活且功能丰富,非常适合用来处理数组、队列、堆栈等问题。以下总结了常用的列表语法和在算法题中会用到的场景:


1. 列表的创建

  • 直接创建

    lst = [1, 2, 3, 4]
    
  • 列表推导式

    squares = [x ** 2 for x in range(5)]  # [0, 1, 4, 9, 16]
    even_numbers = [x for x in range(10) if x % 2 == 0]  # [0, 2, 4, 6, 8]
    
  • 初始化固定大小列表

    lst = [0] * 5  # [0, 0, 0, 0, 0]
    

2. 列表的基本操作

  • 访问元素

    lst = [10, 20, 30]
    first = lst[0]  # 10
    last = lst[-1]  # 30
    
  • 修改元素

    lst[1] = 25  # lst becomes [10, 25, 30]
    
  • 追加元素

    lst.append(40)  # lst becomes [10, 25, 30, 40]
    
  • 插入元素

    lst.insert(1, 15)  # lst becomes [10, 15, 25, 30, 40]
    
  • 删除元素

    lst.pop()        # 删除最后一个元素,返回40,lst变为[10, 15, 25, 30]
    lst.pop(1)       # 删除索引1处的元素,返回15,lst变为[10, 25, 30]
    lst.remove(25)   # 删除值为25的元素,lst变为[10, 30]
    

3. 切片操作

  • 基本切片

    lst = [1, 2, 3, 4, 5]
    lst[1:4]       # [2, 3, 4]
    lst[:3]        # [1, 2, 3]
    lst[3:]        # [4, 5]
    lst[::-1]      # [5, 4, 3, 2, 1] 反转
    
  • 切片赋值

    lst[1:3] = [10, 20]  # lst becomes [1, 10, 20, 4, 5]
    

4. 遍历列表

  • 普通遍历

    for x in lst:
        print(x)
    
  • 索引和值同时遍历

    for i, x in enumerate(lst):
        print(i, x)
    

5. 常用列表操作

  • 求长度

    n = len(lst)  # 返回列表的长度
    
  • 求最值

    max_val = max(lst)
    min_val = min(lst)
    
  • 求和

    total = sum(lst)
    
  • 检查存在性

    if 10 in lst: 
        print("10 exists")
    
  • 排序

    lst.sort()               # 就地升序排序
    lst.sort(reverse=True)   # 就地降序排序
    sorted_lst = sorted(lst) # 返回排序后的新列表
    

6. 列表推导式的应用

列表推导式是算法题中非常高效且简洁的写法。

  • 过滤数据

    nums = [1, 2, 3, 4, 5]
    evens = [x for x in nums if x % 2 == 0]  # [2, 4]
    
  • 嵌套列表推导式

    matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    flatten = [x for row in matrix for x in row]  # [1, 2, 3, 4, 5, 6, 7, 8, 9]
    

7. 二维列表

刷算法题中,二维列表经常用来表示矩阵或图。

  • 创建二维列表

    matrix = [[0] * 3 for _ in range(3)]  # 创建一个3x3的矩阵
    
  • 访问二维列表元素

    val = matrix[1][2]  # 访问第2行第3列
    
  • 遍历二维列表

    for row in matrix:
        for val in row:
            print(val)
    

8. 列表的算法题常见场景

  1. 滑动窗口

    for i in range(len(nums) - k + 1):
        window = nums[i:i+k]  # 提取长度为k的窗口
    
  2. 双指针

    left, right = 0, len(nums) - 1
    while left < right:
        if nums[left] + nums[right] == target:
            break
    
  3. 堆栈模拟

    stack = []
    for num in nums:
        while stack and num > stack[-1]:
            stack.pop()
        stack.append(num)
    
  4. 矩阵遍历

    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            print(matrix[i][j])
    
  5. 构建累加和数组

    prefix_sum = [0] * (len(nums) + 1)
    for i in range(len(nums)):
        prefix_sum[i + 1] = prefix_sum[i] + nums[i]
    

9. 总结

列表是刷算法题中最常用的数据结构之一。掌握列表的操作和技巧,如切片、推导式、遍历、排序等,可以大幅提升代码的简洁性和效率。结合具体场景(如滑动窗口、双指针、二维矩阵遍历),能够更快速地解决问题。

posted @ 2025-01-07 21:46  清澈的澈  阅读(41)  评论(0)    收藏  举报