飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • 第1章 Python简介

    • Python是什么
    • 安装与运行
    • 交互式解释器
    • 注释与编码规范
  • 第2章 变量与数据类型

    • 变量与对象
    • 整数 int
    • 浮点数 float
    • 复数 complex
    • 布尔值 bool
    • 字符串 str
    • 空值 None
    • 类型转换
  • 第3章 运算符与表达式

    • 算术运算符
    • 比较运算符
    • 赋值运算符
    • 逻辑运算符
    • 位运算符
    • 身份与成员运算符
    • 海象运算符
    • 运算符优先级
  • 第4章 流程控制

    • if 语句
    • if-else 语句
    • if-elif-else 语句
    • match-case 语句
    • 条件表达式(三元运算符)
    • while 循环
    • for 循环
    • range 函数
    • break 与 continue
    • 循环的 else 子句
    • pass 语句
  • 第5章 数据结构

    • 列表创建与索引
    • 列表方法
    • 列表推导式
    • 元组
    • 序列解包
    • 集合
    • 字典创建与访问
    • 字典方法
    • 字典推导式
    • range 对象
  • 第6章 函数

    • 定义函数
    • 位置参数与关键字参数
    • 默认参数
    • 可变参数
    • 解包实参
    • 函数返回值
    • lambda 表达式
    • 文档字符串与注解
    • 作用域与命名空间
    • global 与 nonlocal
  • 第7章 模块与包

    • 模块导入
    • 模块搜索路径
    • 包与相对导入
    • 标准库概览
  • 第8章 文件与输入输出

    • 文件读写
    • 上下文管理器
    • 字符串格式化
    • JSON 与 CSV
  • 第9章 面向对象

    • 类与对象
    • 方法
    • 实例变量与类变量
    • 私有变量
    • 继承
    • 多重继承
    • 魔术方法
    • 属性装饰器
    • 数据类 dataclass
  • 第10章 异常处理

    • 语法错误与异常
    • try-except
    • 异常链与 raise
    • 清理操作
    • 自定义异常
  • 第11章 迭代器与生成器

    • 迭代器协议
    • 生成器
    • 生成器表达式
    • 迭代工具
  • 第12章 高级特性

    • 装饰器
    • 函数式编程
  • 第13章 工程实践

    • 测试与调试
    • 代码质量
    • 虚拟环境

列表方法

Python 列表提供了丰富的方法来完成增删改查操作。这些方法都原地修改列表并返回 None。

添加元素

append(x) 在列表末尾添加单个元素,无论传入什么都作为一个整体追加:

nums = [1, 2, 3]
nums.append(4)       # [1, 2, 3, 4]
nums.append([5, 6])  # [1, 2, 3, 4, [5, 6]],整个列表作为一个元素

注意:append 返回 None,不要赋值给变量。

extend(iterable) 将可迭代对象中的每个元素逐个追加,相当于批量添加:

nums = [1, 2, 3]
nums.extend([4, 5])      # [1, 2, 3, 4, 5]
nums.extend("ab")        # [1, 2, 3, 4, 5, 'a', 'b']

extend 原地修改原列表,而 + 总是创建新列表。

insert(i, x) 在指定索引位置插入元素。i 为 0 时插入开头,等于 len(list) 时等同于 append:

nums = [1, 3, 4]
nums.insert(1, 2)        # [1, 2, 3, 4]
nums.insert(100, 5)      # [0, 1, 2, 3, 4, 5],越界时自动追加到末尾

insert 的时间复杂度是 O(n)。频繁在头部插入时,应使用 collections.deque。

删除元素

remove(x) 删除第一个值等于 x 的元素,不存在时抛出 ValueError:

fruits = ["apple", "banana", "cherry", "banana"]
fruits.remove("banana")   # ["apple", "cherry", "banana"],只删第一个

pop([i]) 删除指定索引位置的元素并返回该元素。省略索引时默认删除最后一个:

nums = [10, 20, 30, 40]
last = nums.pop()         # last = 40, nums = [10, 20, 30]

空列表或越界时抛出 IndexError。pop() 配合 append() 可实现栈结构。

clear() 移除所有元素,效果等同于 del a[:]:

nums = [1, 2, 3]
nums.clear()    # []

查找与统计

index(x[, start[, end]]) 返回第一个值等于 x 的元素的索引。可选参数限定搜索范围:

fruits = ["apple", "banana", "cherry", "banana", "date"]
fruits.index("banana")       # 1
fruits.index("banana", 2)    # 3,从索引2开始搜索
fruits.index("orange")       # ValueError: 'orange' is not in list

返回的索引始终是绝对索引,不受 start 参数影响。

count(x) 统计元素出现次数,不存在时返回 0:

nums = [1, 2, 2, 3, 2, 4]
nums.count(2)    # 3

排序与反转

sort(*, key=None, reverse=False) 原地排序,默认升序:

nums = [3, 1, 4, 1, 5, 9, 2, 6]
nums.sort()                  # [1, 1, 2, 3, 4, 5, 6, 9]
nums.sort(reverse=True)      # 降序

key 参数接收函数,从每个元素中提取排序依据:

words = ["banana", "pie", "Washington", "book"]
words.sort(key=len)          # 按长度排序
words.sort(key=lambda x: (len(x), x.lower()))  # 多条件排序

混合不可比较类型会报错。需要保留原列表时,使用 sorted()。

reverse() 原地反转:

nums = [1, 2, 3, 4]
nums.reverse()    # [4, 3, 2, 1]

复制列表

copy() 返回浅拷贝,效果等同于 a[:]:

a = [1, 2, [3, 4]]
b = a.copy()
b[2][0] = 88
print(a)    # [1, 2, [88, 4]],内层仍共享

嵌套列表需要 copy.deepcopy() 才能完全独立。

上一页
列表创建与索引
下一页
列表推导式