2025-01-07 21:46阅读: 9评论: 0推荐: 0

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. 总结

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

本文作者:清澈的澈

本文链接:https://www.cnblogs.com/lmc7/p/18658443

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   清澈的澈  阅读(9)  评论(0编辑  收藏  举报
历史上的今天:
2024-01-07 分布式事务管理
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示