当前位置: 首页 > news >正文

Python 列表:定义、操作、推导式与嵌套

一、列表基础

1. 定义与格式

  • 基本格式列表名 = [元素1, 元素2, 元素3, ...]
    所有元素放在方括号 [] 内,元素之间用英文逗号 , 分隔。
  • 特点
    • 元素类型可混合(整数、字符串、布尔值等均可共存);
    • 有序(元素位置固定,可通过下标访问);
    • 可修改(支持添加、删除、修改元素)。

2. 基础示例

# 定义一个混合类型的列表
li = [1, 2, 'a', True, 3.14]
# 打印列表及类型(list)
print(li, type(li))  # 输出:[1, 2, 'a', True, 3.14] <class 'list'>

二、列表核心操作

1. 元素访问:切片与遍历

列表是可迭代对象,支持通过「下标切片」和「for 循环遍历」获取元素。

(1)切片(获取指定范围元素)
  • 格式:列表名[起始下标:结束下标:步长](左闭右开,步长默认 1,可省略);
  • 下标规则:正向从 0 开始,反向从 -1 开始(-1 代表最后一个元素)。
li = [1, 2, 'a', 4]
# 切片:获取下标 0~2 的元素(不包含下标3)
print(li[0:3])  # 输出:[1, 2, 'a']
# 切片:获取所有元素(省略起始和结束下标)
print(li[:])    # 输出:[1, 2, 'a', 4]
# 切片:反向获取最后2个元素
print(li[-2:])  # 输出:['a', 4]
(2)for 循环遍历

逐一获取列表中的每个元素,适用于批量处理元素。

li = [1, 2, 'a', 4]
for i in li:  # i 依次代表列表中的每个元素print(i)  # 输出:1、2、a、4(每行一个)

2. 添加元素(3 种方法)

列表支持动态添加元素,常用 append()extend()insert() 三种方法,区别如下:

方法功能描述示例代码执行结果
append(元素)整体添加:将元素作为一个整体追加到列表末尾(支持任意类型元素)li = ['one','two']; li.append('three')['one', 'two', 'three']
extend(可迭代对象)分散添加:将可迭代对象(如字符串、列表)的元素逐一追加到列表末尾li = ['one','two']; li.extend('three')['one', 'two', 't', 'h', 'r', 'e', 'e']
insert(下标, 元素)指定位置添加:在指定下标处插入元素,原有元素自动后移(下标超范围则追加到末尾)li = ['one','two']; li.insert(0, 'zero')['zero', 'one', 'two']

示例演示

li = ['one', 'two', 'three']
# 1. append():整体添加
li.append('four')
print(li)  # 输出:['one', 'two', 'three', 'four']# 2. extend():分散添加(字符串拆分为单个字符)
li.extend('four')
print(li)  # 输出:['one', 'two', 'three', 'four', 'f', 'o', 'u', 'r']# 3. insert():指定下标0插入
li.insert(0, 'four')
print(li)  # 输出:['four', 'one', 'two', 'three', 'four', 'f', 'o', 'u', 'r']

3. 修改元素

通过「下标定位」直接赋值修改,语法:列表名[下标] = 新值

li = [1, 2, 3]
# 将下标1的元素(值为2)修改为0
li[1] = 0
print(li)  # 输出:[1, 0, 3]

4. 查找元素(4 种方式)

用于判断元素是否存在、获取元素位置或统计出现次数。

(1)in / not in:判断元素是否存在
  • 元素 in 列表:存在返回 True,否则 False
  • 元素 not in 列表:不存在返回 True,否则 False

实用场景:用户昵称去重(避免重复注册)

# 已存在的昵称列表
name_list = ["adwd", "dwdfw", "zsfafa"]
while True:name = input("请输入你的昵称:")if name in name_list:print(f"{name}已经存在,请重新输入!")else:print(f"{name}可用,已注册!")name_list.append(name)  # 将新昵称加入列表break
(2)index(元素):获取元素下标
  • 返回指定元素在列表中第一次出现的下标
  • 若元素不存在,直接报错(ValueError)。
li = [1, 2, 3, 2]
print(li.index(2))  # 输出:1(第一个2的下标)
(3)count(元素):统计元素出现次数

返回指定元素在列表中出现的总次数,若元素不存在则返回 0

li = [1, 2, 3, 2]
print(li.count(2))  # 输出:2(2出现了2次)
print(li.count(4))  # 输出:0(4不存在)

5. 删除元素(4 种方法)

根据「下标」或「元素值」删除,不同方法适用场景不同:

方法功能描述示例代码执行结果
del 列表名[下标]根据下标删除元素,也可直接删除整个列表(del 列表名li = [1,2,3,4]; del li[2][1, 2, 4]
pop(下标)删除指定下标的元素,默认删除最后一个元素,且返回被删除的元素li = [1,2,3,4]; li.pop()[1, 2, 3](返回 4)
remove(元素)根据元素值删除,默认删除第一次出现的该元素,元素不存在则报错li = [1,2,3,4,2]; li.remove(2)[1, 3, 4, 2]

示例演示

# 1. del:根据下标删除
li1 = [1, 2, 3, 4]
del li1[2]  # 删除下标2的元素(3)
print(li1)  # 输出:[1, 2, 4]# 2. pop():默认删最后一个,或指定下标
li2 = [1, 2, 3, 4]
li2.pop()    # 默认删最后一个(4)
print(li2)   # 输出:[1, 2, 3]
li2.pop(1)   # 删除下标1的元素(2)
print(li2)   # 输出:[1, 3]# 3. remove():按值删除(删第一个2)
li3 = [1, 2, 3, 4, 2]
li3.remove(2)
print(li3)   # 输出:[1, 3, 4, 2]

6. 排序(sort() 与 reverse()

用于对列表元素进行顺序调整,仅支持元素类型一致的列表(如全是数字或全是字符串)。

方法功能描述示例代码执行结果
sort()正序排序:默认从小到大(数字)、按字母顺序(字符串),直接修改原列表li = [1,4,3,7,2]; li.sort()[1, 2, 3, 4, 7]
reverse()倒序排列:将列表元素反转(不排序,仅颠倒顺序),直接修改原列表li = [1,2,3,4]; li.reverse()[4, 3, 2, 1]

示例演示

li = [1, 4, 3, 7, 2]
# 正序排序
li.sort()
print(li)  # 输出:[1, 2, 3, 4, 7]# 倒序排列(基于当前排序结果反转)
li.reverse()
print(li)  # 输出:[7, 4, 3, 2, 1]

三、高级用法

1. 列表推导式(简化列表创建)

通过简洁的语法快速生成列表,替代传统的 for 循环 + append(),分为「基础格式」和「带条件格式」。

(1)基础格式:[表达式 for 变量 in 可迭代对象]
  • 可迭代对象:列表、range()、字符串等;
  • 逻辑:变量遍历可迭代对象,将「表达式」结果作为新列表的元素。

示例 1:批量生成元素(替代 for + append

# 传统方式:生成 0~4 的列表
li1 = []
for i in range(5):li1.append(i)
print(li1)  # 输出:[0, 1, 2, 3, 4]# 列表推导式:一行实现
li2 = [i for i in range(5)]
print(li2)  # 输出:[0, 1, 2, 3, 4]

示例 2:对元素进行运算(如每个元素乘 5)

li = [1, 2, 3, 4]
# 推导式:每个元素乘5后打印(也可生成新列表)
[i * 5 for i in li]  # 输出:[5, 10, 15, 20]
(2)带条件格式:[表达式 for 变量 in 可迭代对象 if 条件]
  • 逻辑:变量遍历可迭代对象,仅当「条件成立」时,才将「表达式」结果加入新列表。

示例:生成 1~10 中的所有奇数

# 传统方式
li1 = []
for i in range(1, 11):if i % 2 == 1:li1.append(i)
print(li1)  # 输出:[1, 3, 5, 7, 9]# 列表推导式:一行实现
li2 = [i for i in range(1, 11) if i % 2 == 1]
print(li2)  # 输出:[1, 3, 5, 7, 9]

2. 列表嵌套(列表中的列表)

列表的元素可以是另一个列表,形成「嵌套列表」,常用于表示二维数据(如表格、矩阵)。

(1)定义嵌套列表
# 嵌套列表:外层列表有5个元素,第4个元素是内层列表 [4,5,6]
li = [1, 2, 3, [4, 5, 6], 7]
(2)访问嵌套元素

通过「多层下标」访问:外层列表下标[内层列表下标]

li = [1, 2, 3, [4, 5, 6], 7]
print(li[3])       # 输出内层列表:[4, 5, 6](外层下标3)
print(li[3][2])    # 输出内层列表的下标2元素:6(先取外层3,再取内层2)
print(li[4])       # 输出外层列表下标4的元素:7
http://www.dtcms.com/a/348221.html

相关文章:

  • 西门子 SCL 简单案例
  • 计算机视觉学习路线:从入门到进阶的完整指南
  • 最近遇到的几个JVM问题
  • java学习 + 一个向前端传流顺序不一致的一个解决思路
  • c++ 常用接口设计
  • C#_依赖注入(DI)
  • vulnhub-billu_b0x靶机渗透
  • HPA 数据库实用指南:解决科研文章逻辑衔接难题的实操教程
  • 05 线性代数【动手学深度学习v2】
  • 构建wezzer平台!
  • VirtualBox 中安装 Ubuntu 22.04
  • daily notes[5]
  • 计算机视觉与自然语言处理技术体系概述
  • 深度学习之第一课深度学习的入门
  • Go语言IDE安装与配置(VSCode)
  • VSCode远程开发实战:SSH连接服务器详解(附仙宫云平台示例)
  • Linux综合练习(dns,dhcp,nfs,web)
  • Spring Boot 中 @Controller与 @RestController的区别及 404 错误解析
  • 【嵌入式汇编基础】-数据处理指令(二)
  • VSCode+Qt+CMake详细地讲解
  • VSCode无权访问扩展市场
  • QT面试题总结(持续更新)
  • Java的IO流和IO流的Buffer包装类
  • Postman参数类型、功能、用途及 后端接口接收详解【接口调试工具】
  • 单链表:数据结构中的高效指针艺术
  • Shell脚本-until应用案例
  • C/C++数据结构之循环链表
  • Dify 部署+deepseek+python调用(win11+dockerdesktop)
  • 大数据、hadoop、爬虫、spark项目开发设计之基于数据挖掘的交通流量分析研究
  • 【运维进阶】case、for、while、until语句大合集