Python 列表全面解析

关于Python列表的详细教程,涵盖增删改查、切片、列表推导式及核心方法


一、 列表基础

1.1 创建列表

列表是Python中最常用的数据结构之一,支持动态存储多种类型的元素。

# 空列表
empty_list = []# 初始化列表
numbers = [1, 2, 3, 4]
fruits = ["apple", "banana", "orange"]# 混合类型列表
mixed = [1, "hello", 3.14, True]# 使用构造函数
from_range = list(range(5))       # [0, 1, 2, 3, 4]
from_string = list("Python")      # ['P', 'y', 't', 'h', 'o', 'n']

1.2 列表特性

  • ​有序性:元素按插入顺序存储。
  • ​可变性:支持原地修改。
  • ​灵活性:可嵌套其他数据结构(如列表、字典)。

二、 增删改查操作

2.1 增加元素

方法功能说明示例
append(item)末尾添加元素fruits.append(“grape”)
insert(index, item)指定位置插入元素fruits.insert(1, “mango”)
extend(iterable)合并另一个可迭代对象fruits.extend([“kiwi”, “peach”])

示例

fruits = ["apple", "banana"]
fruits.append("orange")      # ["apple", "banana", "orange"]
fruits.insert(1, "mango")    # ["apple", "mango", "banana", "orange"]
fruits.extend(["kiwi"])      # ["apple", "mango", "banana", "orange", "kiwi"]

2.2 删除元素

方法功能说明示例
remove(value)删除首个匹配元素fruits.remove(“banana”)
pop([index])删除并返回指定位置元素popped = fruits.pop(2)
del 语句按索引或切片删除del fruits[0:2]
clear()清空列表fruits.clear()

示例

fruits = ["apple", "mango", "banana", "orange"]
fruits.remove("mango")       # ["apple", "banana", "orange"]
popped = fruits.pop(1)        # popped = "banana",剩余列表:["apple", "orange"]
del fruits[0]                # ["orange"]
fruits.clear()                # []

2.3 修改元素

通过索引直接赋值:

fruits = ["apple", "banana"]
fruits[1] = "mango"          # ["apple", "mango"]# 切片批量修改
fruits[0:2] = ["grape", "peach"]  # ["grape", "peach"]

2.4 查询元素

方法/操作功能说明示例
索引访问获取指定位置元素fruits[0] → “apple”
index(value)返回元素首次出现的索引fruits.index(“mango”) → 1
count(value)统计元素出现次数fruits.count(“apple”) → 1
in 关键字检查元素是否存在“banana” in fruits → True

三、切片操作

3.1 基础语法

切片语法:list[start:stop:step],取头不取尾

  • start:起始索引(包含)。
  • stop:结束索引(不包含)。
  • step:步长(默认为1)。

示例

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]print(nums[2:5])     # [2, 3, 4]
print(nums[::2])     # [0, 2, 4, 6, 8](步长2)
print(nums[::-1])    # [9, 8, 7, ..., 0](反转列表)

3.2 高级用法

  • 复制列表:copy = nums[:]
  • ​删除元素:del nums[2:5]
  • ​替换元素:nums[1:3] = [10, 20] # 截取的元素和替换的元素个数相等

四、列表推导式

4.1 基本语法

[expression for item in iterable]

示例

# 生成平方数列表
squares = [x**2 for x in range(5)]    # [0, 1, 4, 9, 16]# 转换字符串为小写
words = ["Hello", "World"]
lower_words = [word.lower() for word in words]  # ["hello", "world"]

4.2 条件过滤与嵌套

# 过滤偶数
evens = [x for x in range(10) if x % 2 == 0]  # [0, 2, 4, 6, 8]# 嵌套循环
matrix = [[1, 2], [3, 4]]
flat = [num for row in matrix for num in row]  # [1, 2, 3, 4]

列表合并

5.1 基础合并方法

  • ​**+ 运算符**:
list1 = [1, 2]
list2 = [3, 4]
combined = list1 + list2  # [1, 2, 3, 4]
  • extend() 方法
list1.extend(list2)  # 原地合并,list1变为[1, 2, 3, 4]

5.2 复杂合并场景

​+ 交替合并​(使用zip):

names = ["Alice", "Bob"]
scores = [90, 85]
merged = [x for pair in zip(names, scores) for x in pair]  # ["Alice", 90, "Bob", 85]

​+ 处理不等长列表​(使用zip_longest):

from itertools import zip_longest
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30]
merged = list(zip_longest(names, ages, fillvalue="N/A"))  # [("Alice",25), ("Bob",30), ("Charlie","N/A")]

六、列表对象支持的方法

方法功能说明时间复杂度
sort()原地排序(支持自定义规则)O(n logn)
reverse()反转列表顺序O(n)
copy()浅拷贝列表O(n)
count(value)统计元素出现次数O(n)
index(value)返回元素首次出现的索引O(n)

示例

nums = [3, 1, 4, 1, 5]
nums.sort()                   # [1, 1, 3, 4, 5]
nums.reverse()               # [5, 4, 3, 1, 1]
print(nums.count(1))         # 2

七、实际应用案例

案例1:筛选高于平均分的成绩

scores = [85, 92, 78, 90, 88]
avg = sum(scores) / len(scores)
high_scores = [s for s in scores if s > avg]  # [92, 90, 88]

案例2:实时日志处理

from collections import deque
log_buffer = deque(maxlen=100)  # 仅保留最新100条日志
while True:new_log = receive_log()log_buffer.append(new_log)

八、性能优化与高级技巧(了解即可)

8.1 头部插入优化

列表的insert(0, item)操作时间复杂度为 ​O(n),频繁头部插入时建议使用collections.deque

from collections import deque
dq = deque([1, 2, 3])
dq.appendleft(0)             # 头部插入 → deque([0, 1, 2, 3])

8.2 内存优化

​生成器表达式处理大数据:

big_data = (x for x in range(10**6))  # 惰性加载,节省内存

Python列表是功能强大且灵活的数据结构,掌握其核心操作与方法能显著提升代码效率。建议结合具体场景选择合适的方法,如高频头部操作使用deque,大数据处理使用生成器。通过实践加深理解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/73761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Ratis】ReferenceCountedObject接口的作用及参考意义

Apache Ratis的项目源码里,大量用到了自定义的ReferenceCountedObject接口。 本文就来学习一下这个接口的作用,并借鉴一下它解决的问题和实现原理。 功能与作用 ReferenceCountedObject 是一个接口,用于管理对象的引用计数。它的主要功能和作用包括: 引用计数管理: 提供…

leetcode-50.Pow(x,n)

快速计算次方的方法。 首先&#xff0c;先保证n是正数。 如果n<0&#xff0c;就让x取反&#xff0c;n取绝对值。 然后考虑怎么快速乘法。 考虑 x 7 x 1 2 4 x ∗ x 2 ∗ x 4 x^7x^{124}x*x^2*x^4 x7x124x∗x2∗x4&#xff0c;可以发现&#xff0c;本来乘6次x&#xff0…

基于javaweb的SpringBoot公司日常考勤系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

游戏引擎学习第167天

回顾和今天的计划 我们不使用引擎&#xff0c;也不依赖库&#xff0c;只有我们自己和我们的小手指在敲击代码。 今天我们会继续进行一些工作。首先&#xff0c;我们会清理昨天留下的一些问题&#xff0c;这些问题我们当时没有深入探讨。除了这些&#xff0c;我觉得我们在资产…

深度学习框架PyTorch——从入门到精通(5)自动微分

使用torch.autograd自动微分 张量、函数和计算图计算梯度禁用梯度追踪关于计算图的更多信息张量梯度和雅可比乘积 在训练神经网络时&#xff0c;最常用的算法是反向传播。在该算法中&#xff0c;参数&#xff08;模型权重&#xff09;根据损失函数的梯度相对于给定参数进行调整…

以食为药:缓解老人手抖的饮食策略

手抖&#xff0c;在医学上称为震颤&#xff0c;是老年人常见的症状之一。其成因复杂&#xff0c;可能涉及神经系统病变、甲状腺功能异常、药物副作用等。除了积极就医治疗&#xff0c;合理的饮食对于缓解手抖症状、提高老人生活质量具有重要意义。 老人手抖时&#xff0c;身体能…

JUC大揭秘:从ConcurrentHashMap到线程池,玩转Java并发编程!

目录 JUC实现类 ConcurrentHashMap 回顾HashMap ConcurrentHashMap CopyOnWriteArrayList 回顾ArrayList CopyOnWriteArrayList: CopyOnWriteArraySet 辅助类 CountDownLatch 线程池 线程池 线程池优点 ThreadPoolExecutor 构造器各个参数含义&#xff1a; 线程…

C++之list类及模拟实现

目录 list的介绍 list的模拟实现 定义节点 有关遍历的重载运算符 list的操作实现 &#xff08;1&#xff09;构造函数 (2)拷贝构造函数 &#xff08;3&#xff09;赋值运算符重载函数 &#xff08;4&#xff09;析构函数和clear成员函数 &#xff08;5&#xff09;尾…

Elasticsearch 向量检索详解

文章目录 1、向量检索的用途2、适用场景2.1 自然语言处理&#xff08;NLP&#xff09;&#xff1a;2.2 图像搜索&#xff1a;2.3 推荐系统2.4 音视频搜索 3、向量检索的核心概念3.1 向量3.2 相似度计算3.3 向量索引 4、案例&#xff1a;基于文本的语义搜索5、总结 向量检索是 E…

自学软硬件第755 docker容器虚拟化技术

见字如面&#xff0c; 这里是AIGC创意人_竹相左边&#xff0c; 正在通过AI自学软硬件工程师&#xff0c;目标手搓可回收火箭玩具。 我很喜欢 《流浪地球 2》中 &#xff0c;马兆&#xff1a;没有硬件支撑&#xff0c;你破解个屁。 写作背景 今天在剪视频&#xff0c;然后看…

不可不知的分布式数据库-TiDB

不可不知的分布式数据库-TiDB 介绍TiDb架构TiDb与Mysql的区别功能特性性能表现数据可靠性运维管理成本 Docker部署TiDB1. 获取 TiDB 配置文件2. 启动 TiDB 集群3. 连接到 TiDB4. 停止和清理 TiDB 集群注意事项 实用案例TiDB实现分布式事务实现原理实现方式SQL 方式编程方式 注意…

20242817李臻《Linux⾼级编程实践》第四周

20242817李臻《Linux⾼级编程实践》第4周 一、AI对学习内容的总结 第5章 Linux进程管理 5.1 进程基本概念 进程与程序的区别 程序&#xff1a;静态的二进制文件&#xff08;如/bin/ls&#xff09;&#xff0c;存储在磁盘中&#xff0c;不占用运行资源。进程&#xff1a;程…

基于 Prometheus + Grafana 监控微服务和数据库

以下是基于 Prometheus Grafana 监控微服务和数据库的详细指南&#xff0c;包含架构设计、安装配置及验证步骤&#xff1a; 一、整体架构设计 二、监控微服务 1. 微服务指标暴露 Spring Boot 应用&#xff1a; xml <!-- 添加 Micrometer 依赖 --> <dependency>…

使用GoogleNet实现对花数据集的分类预测

使用GoogleNet实现对花数据集的分类预测 1.作者介绍2.关于理论方面的知识介绍2.1GooLeNet的知识介绍2.2CNN发展阶段2.2GooLeNet创新模块 3.关于实验过程的介绍&#xff0c;完整实验代码&#xff0c;测试结果3.1数据集介绍3.2实验过程3.3实验结果 1.作者介绍 王海博, 男 , 西安…

流量密码破解:eBay店铺首页改版后的黄金展示位

流量密码破解&#xff1a;eBay店铺首页改版后的黄金展示位 近年来&#xff0c;跨境电商行业竞争日趋激烈&#xff0c;流量分配机制的调整成为平台卖家最为关注的核心议题之一。作为全球领先的在线电商平台&#xff0c;eBay的每一次页面优化都可能对卖家的经营策略产生深远影响…

从0到1彻底掌握Trae:手把手带你实战开发AI Chatbot,提升开发效率的必备指南!

我正在参加Trae「超级体验官」创意实践征文&#xff0c; 本文所使用的 Trae 免费下载链接&#xff1a; www.trae.ai/?utm_source… 前言 大家好&#xff0c;我是小Q&#xff0c;字节跳动近期推出了一款 AI IDE—— Trae&#xff0c;由国人团队开发&#xff0c;并且限时免费体…

Netty:java高性能网络编程的基石(下)

一、Netty是什么&#xff1f;为什么需要它&#xff1f; Netty是一个异步事件驱动的网络应用框架&#xff0c;基于Java NIO技术封装&#xff0c;用于快速开发高性能、高可靠性的网络服务器和客户端程序。作为当前最流行的NIO框架之一&#xff0c;支撑着Dubbo、RocketMQ、Elasti…

leetcode-47.全排列II

如何在有重复值的时候节省时间是优化重点。 基础写法肯定是按无重复值时的全排列写&#xff0c;在其中要加上防止走重复路径的分支。 能防止的也只有同层&#xff0c;如果同层走一个值&#xff0c;但是该值重复&#xff0c;且走过了&#xff0c;则放弃走该分支。所以设layer_u…

函数(函数的概念、库函数、自定义函数、形参和实参、return语句、数组做函数参数、嵌套调用和链式访问、函数的声明和定义、static和extern)

一、函数的概念 •C语⾔中的函数&#xff1a;⼀个完成某项特定的任务的⼀⼩段代码 •函数又被翻译为子函数&#xff08;更准确&#xff09; •在C语⾔中我们⼀般会⻅到两类函数&#xff1a;库函数 ⾃定义函数 二、库函数 1 .标准库和头文件 •C语⾔的国际标准ANSIC规定了⼀…

孜然SEO静态页面生成系统V1.0

孜然SEO静态页面生成系统&#xff0c;1秒生成上万个不同的静态单页系统&#xff0c;支持URL裂变采集&#xff0c;采集的内容不会重复&#xff0c;因为程序系统自带AI重写算法&#xff0c;AI扩写算法&#xff0c;可视化的蜘蛛池系统让您更清楚的获取到信息&#xff01; 可插入二…