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

Python列表全面解析:从基础到高阶操作

一、为什么需要列表?

在Python中,列表是可变有序序列,用于存储多个元素的容器。相较于单一变量存储独立值,列表能更高效地管理批量数据,其特点包括:

  • 引用存储:列表元素存储的是对象的引用
  • 异构性:支持不同数据类型共存
  • 动态性:长度和内容可动态修改
a = 10  # 单一变量存储
lst = ['hello', 98, 98.3]  # 列表存储多类型数据
print(id(lst))  # 查看列表内存地址

二、列表的创建方式

  1. 字面量创建
    lst = [元素1, 元素2, ...]

  2. 构造函数创建
    lst = list(iterable)

lst1 = ['Python', 'Java']          # 直接创建
lst2 = list(('C++', 2024))         # 元组转列表
lst3 = list('Hello')               # 字符串转列表 → ['H','e','l','l','o']

三、核心特性解析

1. 索引与切片

  • 正向索引:从0开始递增
  • 逆向索引:从-1开始递减
  • 切片操作list[start:stop:step](左闭右开)
lst = [10, 20, 30, 40, 50]
print(lst[1])     # 20(正向索引)
print(lst[-2])    # 40(逆向索引)
print(lst[1:4])   # [20,30,40](基础切片)
print(lst[::-1])  # [50,40,30,20,10](逆序切片)

2. 元素的增删改查

添加元素
方法描述时间复杂度
append(x)末尾追加元素O(1)
extend(iter)扩展多个元素O(k)
insert(i,x)指定位置插入O(n)
lst = [1, 2]
lst.append([3,4])     # [1,2,[3,4]]
lst.extend(range(3))  # [1,2,0,1,2]
lst.insert(1, 'new')  # [1,'new',2,0,1,2]
删除元素
方法描述注意点
remove(x)删除首个匹配值元素不存在时报错
pop([i])删除指定索引元素默认删除末尾元素
clear()清空列表保留空列表对象
nums = [10, 20, 30, 20]
nums.remove(20)      # [10,30,20]
nums.pop(1)          # [10,20]
nums[1:] = []        # [10](切片删除)
del nums[0]          # []
修改与查询
lst = ['A', 'B', 'C']
lst[1] = 'X'              # 直接赋值修改
print(lst.index('C'))     # 2(查询索引)
print('B' in lst)         # False(存在性检查)

3. 排序与反转

  • 原地排序sort() 方法直接修改原列表
  • 生成新列表sorted() 函数返回新对象
  • 逆序操作reverse() 或 [::-1] 切片
data = [3, 1, 4, 2]
data.sort(reverse=True)   # [4,3,2,1]
new_data = sorted(data)   # [1,2,3,4](原列表不变)
data.reverse()            # [1,2,3,4] → [4,3,2,1]

四、高阶操作技巧

1. 列表生成式

快速生成列表的简洁语法:

squares = [x**2 for x in range(5)]          # [0,1,4,9,16]
even_nums = [n for n in nums if n%2 == 0]   # 过滤偶数

2. 嵌套列表处理

处理多维数据结构:

matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]
print(matrix[1][2])       # 6(访问第二行第三列)

3. 列表去重方法

  • 集合转换法list(set(lst))(无序)
  • 顺序保留法:遍历判断添加
# 保留原始顺序
def deduplicate(lst):seen = []for item in lst:if item not in seen:seen.append(item)return seen

五、性能与应用场景

  1. 时间复杂度分析

    • 索引/赋值:O(1)
    • 插入/删除:平均O(n)
    • 搜索元素:O(n)
  2. 适用场景

    • 动态数据集合
    • 需要频繁修改的序列
    • 非数值型数据存储(如字符串、对象混合存储)

六、总结

Python列表作为核心数据结构,具备以下核心优势:

  • 灵活的元素管理:支持增删改查全套操作
  • 丰富的内置方法:提供排序、反转等便捷功能
  • 高效的数据处理:结合生成式实现快速操作

掌握列表的底层原理和高级用法,将显著提升Python编程效率。建议在实际开发中根据需求选择合适的方法,平衡功能实现与性能优化。


最新技术动态请关注作者:Python×CATIA工业智造​​
版权声明:转载请保留原文链接及作者信息

相关文章:

Python列表全面解析:从基础到高阶操作

一、为什么需要列表? 在Python中,列表是可变有序序列,用于存储多个元素的容器。相较于单一变量存储独立值,列表能更高效地管理批量数据,其特点包括: ​引用存储:列表元素存储的是对象的引用​…...

C++调用C动态库编译时报undefined reference to “funcxxx“错误

问题描述:Linux平台上C调用C库进行make编译时报undefined reference to "funcxxx"错误,错误实例如下: /usr/bin/ld: CMakeFiles/dialog.dir/widgets/widget.cpp.o: in function Widget::loadVerificationModule(): /home/zhangxia…...

基于Spring Boot+Vue 网上书城管理系统设计与实现(源码+文档+部署讲解)

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

C++ 中自主内存管理 new/delete 与 malloc/free 完全详解

C 中 new/delete 与 malloc/free 完全详解 一、new/delete 与 malloc/free 的区别 特性new/deletemalloc/free属于C语言C语言申请的内存区堆(Heap)堆(Heap)返回类型指向对象类型的指针(自动转换)void*&…...

Maven中的依赖管理

目录 什么是依赖范围 什么是依赖传递 依赖范围对依赖传递的影响 依赖冲突 什么是依赖冲突 依赖冲突的解决方案 版本锁定 短路径优先 ​编辑 声明优先 特殊优先(后来者居上) 可选依赖 排除依赖 可选依赖和排除依赖的区别 刷新依赖的8种方式…...

生态修复项目管理软件

在“双碳”目标与生态文明建设的双重驱动下,生态修复项目正成为全球环境治理的核心战场。然而,矿山复绿、湿地修复、水土保持等工程往往面临跨地域、多主体、长周期的管理难题——从数据分散到进度失控,从成本超支到风险频发,传统…...

深度剖析 RocketMQ 5.0 之架构解析:云原生架构如何支撑多元化场景?

拓展学习:🔍「RocketMQ 中文社区」 持续更新,提供 RocketMQ 领域专家模型的 AI 答疑 作者 | 隆基 简介: 了解 RocketMQ 5.0 的核心概念和架构概览;然后我们会从集群角度出发,从宏观视角学习 RocketMQ 的管…...

Spring中bean的生命周期(笔记)

bean的生命周期,按照最重要五步 第一步:实例化bean,调用无参构造方法(通过BeanDefinition利用反射实例化Bean对象(无参数构造方法) 并通过推断构造方法...并放入三级缓存中..) 第二步:给bean属性赋值(调用…...

transform-实现Encoder 编码器模块

Encoder 论文地址 https://arxiv.org/pdf/1706.03762 Encoder结构介绍 Transformer Encoder是Transformer模型的核心组件,负责对输入序列进行特征提取和语义编码。通过堆叠多层结构相同的编码层(Encoder Layer),每层包含自注意力机…...

LVGL -窗口操作

1 窗口背景介绍 在 LVGL 中,screen 是一个顶层对象,代表你设备上当前显示的整个画面。它相当于一个“全屏容器”,你可以在上面添加按钮、标签、图像、容器等各种界面控件。它的本质就是一个特殊的 lv_obj_t,但它没有父对象&#…...

ollama运行qwen3

环境 windows server GPU 32G 内存 40G 升级ollama 需要版本 0.6.6以上 ollama --version拉取模型 ollama pull qwen3:32b时间比较长,耐心等待 运行模型 ollama run qwen3:32b运行起来之后发现GPU是可以跑起来的,发个你好看看 默认是深度思考的,不…...

如何查看和验证AWS CloudFront的托管区域ID

在使用AWS Route 53设置DNS记录时,正确识别CloudFront分发的托管区域ID是至关重要的。本文将详细介绍几种查看和验证CloudFront托管区域ID的方法,特别关注中国区CloudFront的特殊情况。 为什么托管区域ID很重要? 托管区域ID是AWS服务中的一个关键标识符。在创建指向CloudF…...

yum 安装 ncurses-devel 报错 baseurl 的解决方法

解决 yum 安装 ncurses-devel 报错(baseurl 问题) 出现 yum install ncurses-devel 报错 Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64 的原因,很可能是因为 CentOS 7 的 SCL 源在 2024 年 6 月 30 日停止维护了。以下是解…...

《Vue3学习手记7》

组件通信&#xff08;续&#xff09; $attrs 组件通信&#xff1a;$attrs 适用于祖传孙或孙传祖 &#xff08;需要通过中间组件&#xff09; 传递给后代的数据&#xff0c;但未被接收&#xff0c;都保存在attrs中 1.祖传孙 父组件&#xff1a; <template><div cl…...

算法备案类型解析:如何判断你的算法属于哪种类型?

根据《互联网信息服务算法推荐管理规定》政策&#xff0c;算法备案已经成为了强制性备案。但对于企业而言&#xff0c;如何准确判断自身算法所属的备案类型往往存在困惑&#xff0c;今天我们就来详细盘一盘算法备案的类型&#xff0c;教你如何判断自己的算法属于哪一类 一、算…...

Javascript 中作用域的理解?

一、作用域的类型 1. 全局作用域&#xff08;公司大门外&#xff09; 范围&#xff1a;整个 JavaScript 文件变量&#xff1a;像贴在公告栏上的信息&#xff0c;所有人可见例子&#xff1a;const companyName "阿里"; // 全局变量&#xff0c;任何地方都能访问 fu…...

Qt入门——什么是Qt?

Qt背景介绍 什么是Qt? Qt 是⼀个 跨平台的 C 图形用户界面应用程序框架 。它为应用程序开发者提供了建立艺术级图形界面所需的所有功能。它是 完全面向对象 的&#xff0c;很容易扩展。Qt 为开发者提供了 ⼀种基于组件的开发模式 &#xff0c;开发者可以通过简单的拖拽和组合…...

Snap7西门子PLC通信协议

S7协议&#xff0c;作为西门子的专有协议&#xff0c;广泛应用于多种通讯服务中&#xff0c;如PG通讯、OP通讯以及S7基本通讯等。它独立于西门子的各种通讯总线&#xff0c;能够在MP、PROFIBUS、Ethernet以及PROFINET等多种网络上运行。S7协议实质上是一个由多种应用层协议构成…...

GTC Taipei 2025 医疗域前瞻:从AI代理到医疗生态,解码医疗健康与生命科学的未来图景

引言 2025年,全球医疗健康领域正经历一场由人工智能、机器人技术与分布式计算驱动的范式转移。随着NVIDIA及其生态伙伴在GTC Taipei 2025大会上的深度布局,医疗行业的核心趋势愈发清晰:AI代理程序(Digital AI Agents)赋能临床协作、医疗大数据与精准医学加速落地、医学影…...

C++的vector中emplace_back() 与 push_back() 的区别

C 中 vector 的 emplace_back() 和 push_back() 均用于向容器末尾添加元素&#xff0c;但二者在实现和效率上有显著区别&#xff1a; 1. 参数传递方式 push_back()&#xff1a;接受一个已构造的对象&#xff08;左值或右值&#xff09;&#xff0c;将其拷贝或移动到容器中。 s…...

LangChain4j +DeepSeek大模型应用开发——5 持久化聊天记忆 Persistence

默认情况下&#xff0c;聊天记忆存储在内存中。如果需要持久化存储&#xff0c;可以实现一个自定义的聊天记忆存储类&#xff0c;以便将聊天消息存储在你选择的任何持久化存储介质中。 1. 存储介质的选择 大模型中聊天记忆的存储选择哪种数据库&#xff0c;需要综合考虑数据特…...

C++核心编程 1.2 程序运行后

1.2 程序运行后 栈区&#xff1a; 由编译器自动分配释放, 存放函数的参数值,局部变量等 注意事项&#xff1a;不要返回局部变量的地址&#xff0c;栈区开辟的数据由编译器自动释放 int * func() {int a 10;return &a; }int main() {int *p func();cout << *p <…...

小市值策略复现(A股选股框架回测系统)

相关config配置 https://quantkt.com/forumDetail?id201043 很早就知道了小市值模型&#xff0c;正好量化选股回测框架出来了&#xff0c;把最裸的小市值复现下&#xff0c;顺便验证下框架逻辑。 科普: 小市值策略基于 “小市值效应”&#xff0c;即从历史数据来看&#xf…...

C语言(6)—函数递归

文章目录 一、递归的基本概念1.1 什么是递归1.2 递归的核心思想1.3 递归的必要条件 二、递归的经典应用2.1 阶乘计算 三、递归与迭代的比较3.1 递归的优缺点3.2 迭代的优缺点 四、递归的底层机制4.1 函数调用栈4.2 栈溢出风险 五、递归优化技巧5.1 记忆化&#xff08;Memoizati…...

【网络】HTTP报文首部字段

目录 一. 预备知识 1.1.代理、网关和隧道 1.1.1.代理 1.1.2.网关 1.1.3.隧道 1.2.保存资源的缓存 1.2.1.缓存的有效期限 1.2.2.客户端的缓存 1.3.用单台虚拟主机实现多个域名 二. HTTP首部字段 2.1.HTTP 首部字段格式 2.2.四种 HTTP 首部字段类型 三. HTTP通用首部…...

【Fifty Project - D20】

今日完成记录 TimePlan完成情况7&#xff1a;30 - 11&#xff1a;30收拾行李闪现广州 & 《挪威的森林》√10&#xff1a;00 - 11&#xff1a;00Leetcode√16&#xff1a;00 - 17&#xff1a;00健身√ Leetcode 每日一题 每日一题来到了滑动窗口系列&#xff0c;今天是越…...

【Linux系统】systemV共享内存

system V共享内存 在Linux系统中&#xff0c;共享内存是一种高效的进程间通信&#xff08;IPC&#xff09;机制&#xff0c;它允许两个或者多个进程共享同一块物理内存区域&#xff0c;这些进程可以将这块区域映射到自己的虚拟地址空间中。 共享内存区是最快的IPC形式。一旦这…...

【计算机网络】DHCP——动态配置ip地址

DHCP 是什么&#xff1f; DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09; 是一种网络协议&#xff0c;用于自动分配 IP 地址和其他网络配置参数&#xff08;如子网掩码、默认网关、DNS 服务器等&#xff09;给网络中的设备&…...

TDengine 订阅不到数据问题排查

简介 TDengine 在实际生产应用中&#xff0c;经常会遇到订阅程序订阅不到数据的问题&#xff0c;总结大部分都为使用不当或状态不正确等问题&#xff0c;需手工解决。 查看服务端状态 通过 sql 命令查看有问题的 topic 和consumer_group 组订阅是否正常。 select * from inf…...

低版的spring boot 1.X接入knife4j

低版的spring boot 1.X接入knife4j 老的项目是用spring boot 1.5.10.RELEASE 不好升级 &#xff0c;原来接口文档一直用的是老的swagger样式&#xff0c;不是很好看&#xff0c;网上查了下&#xff0c;发现有个knife4j挺好看的&#xff0c;用一下他们的样式&#xff0c;下面是…...

outlook for mac本地邮件存放在哪儿?

尽管 PST 格式通常与 Microsoft Outlook 联系在一起&#xff0c;但认为它也在 Mac OS 上存储邮箱数据是一种误解。实际上&#xff0c;Outlook for Mac 不会将邮件存储为 PST 文件。无法在 Outlook for Mac 中找到 PST 文件位置&#xff0c;因为它不使用 PST 文件来存储邮箱数据…...

javascript<——>进阶

一、作用域&#xff1a;变量可以被访问的范围 1.局部作用域 1.1函数作用域 在函数内部声明的变量&#xff0c;在函数内部被访问的&#xff0c;外部无法直接访问。 总结&#xff1a;1、函数内部声明的变量&#xff0c;在函数外部无法直接访问 2、函数的参数也是函数内部的局…...

Java练习8

一.题目 二.源码 package TestRuMen;import java.util.Random; import java.util.Scanner;public class Test11 {public static void main(String[] args){// 调用 createNumber 方法生成一组随机的中奖号码int[] arrcreateNumber();// 调用 userInputNumber 方法获取用户输入…...

C语言按位操作符

在C语言中&#xff0c;按位操作符直接对整数的二进制位&#xff08;bit&#xff09;进行操作&#xff0c;常用于底层编程、硬件控制或性能优化场景。以下是按位操作符的详细说明和用法&#xff1a; 1. 按位操作符列表 操作符名称功能描述示例&按位与对应位均为1时结果为1&…...

Linux(权限管理)

权限概述 基本概念 定义&#xff1a;Linux权限是操作系统对用户和进程访问资源进行精细化管控&#xff0c;通过读&#xff08;r4&#xff09;、写&#xff08;w2&#xff09;、执行&#xff08;x1&#xff09;三种基础权限组合实现。 其中在运维的角度看它们所对应的操作权限…...

Redis入门到实战——基础篇

一、初识Redis 1. 认识NoSQL 2. 认识Redis Redis诞生于2009年&#xff0c;全称Remote Dictionary Server&#xff0c;远程词典服务器&#xff0c;是一个基于内存的键值型NoSQL数据库。 特征&#xff1a; 键值型&#xff08;key-value&#xff09;&#xff0c;value支持多种…...

ctf.show 卷王杯 pwn签到

pwn签到 64位 ret2libc pwn签到 (1) motalymotaly-VMware-Virtual-Platform:~/桌面$ file pwn pwn: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]0953abcf1dd6…...

Dali 1.1.4 | 使用尖端技术将描述转换成独特艺术品、照片和图像,发挥无限创意

Dali是一款先进的AI图像生成器应用程序&#xff0c;能够根据用户的描述生成不同风格的独特图像。无论是迷人的数字艺术、创新的纹身设计还是独一无二的标志&#xff0c;甚至是超写实的照片&#xff0c;Dali都能轻松应对。这款解锁版为用户提供了更多的创作自由度和无限可能&…...

LeetCode 2906 统计最大元素出现至少K次的子数组(滑动窗口)

给出一个示例&#xff1a; 输入&#xff1a;nums [1,3,2,3,3], k 2 输出&#xff1a;6 解释&#xff1a;包含元素 3 至少 2 次的子数组为&#xff1a;[1,3,2,3]、[1,3,2,3,3]、[3,2,3]、[3,2,3,3]、[2,3,3] 和 [3,3] 。该题也是一个比较简单的滑动窗口的题目&#xff0c;但是…...

文献阅读(三)基于干旱强度和恢复时间的生态系统恢复力评估|《Agricultural and Forest Meteorology》

傅伯杰院士团队发表在《Agricultural and Forest Meteorology》上的一篇文章&#xff0c;定义了一个新的恢复力指标&#xff0c;通过指数拟合曲线表征干旱强度和相应恢复时间的关系&#xff0c;用曲线面积量化恢复力&#xff1b;耦合干旱强度和恢复时间来评估生态系统对干旱的恢…...

32、Server.Transfer和Response.Redirect的区别是什么?

Server.Transfer 和 Response.Redirect 是 ASP.NET 中用于页面跳转的两种方法&#xff0c;但它们在实现机制、性能、URL 显示等方面存在显著区别。以下是两者的核心差异&#xff1a; 1. 实现机制 Server.Transfer 服务器端跳转&#xff1a;直接在服务器内部将请求从当前页面…...

iOS—仿tableView自定义闹钟列表

自定义View实现闹钟列表&#xff0c;左滑删除&#xff0c;滑动列表时收起删除按钮。用代理的方法实现ListView的创建&#xff0c;删除以及开关回调&#xff0c;并实现动画效果。 ClockViewCell使用block通知ListView&#xff0c;ListView通过代理通知上层ClockView 1、文件组…...

Spark,集群搭建-Standalone

集群搭建-Standalone 一、解压 在之前的学习中我们有了一个软件包 spark.3.1.2-bin-hadoop3.2.tgz &#xff08;eg我的在 /opt/software目录下&#xff09;把这个软件包解压到 /opt/module 下&#xff08;也可以自己决定解压到哪里&#xff09;。对应的命令是&#xff1a; t…...

【C++11】新的类功能、lambda

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲C11——新的类功能、lambda、包装器 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;C学习笔记 &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&#xff1a;C语言入门基础&#xf…...

stm32 g031g8 flash擦除函数被坑

先记录一下在擦除的时候由于调用了这个FLASH_PageErase(FLASH_BANK_1, secpos); 导致擦除不成功&#xff0c;写入失败。 下面的擦除有问题// 使用 FLASH_PageErase 擦除该页while ((FLASH->SR & FLASH_SR_BSY1) ! 0); // 等待空闲FLASH_PageErase(FLASH_BANK_1, secpo…...

SQL实战:04之SQL中的分组问题求解

文章目录 概述题目&#xff1a;分组问题求解题解第一步&#xff1a;求解差值步骤二&#xff1a;窗口分组累加完整SQL 总结 概述 最近刷题时遇到一些比较有意思的题目&#xff0c;乍一遇上时还不知道怎么求解&#xff0c;在灵光一闪时找到了问题的求解答案&#xff0c;感觉还比…...

基于DrissionPage的实习信息爬虫改造与解析

目录 ​编辑 一、DrissionPage技术优势分析 二、代码改造实现 2.1 环境配置 2.2 爬虫类定义 2.3 核心爬取逻辑 一级页面解析优化 二级页面解析优化 2.4 分页控制机制 三、关键技术解析 3.1 智能元素定位 3.2 请求管理优化 3.3 反爬对抗策略 四、改造前后对比测试…...

react-native打包报错:缺少build文件夹

在React Native项目中&#xff0c;如果你遇到了提示“没有build文件夹”的问题&#xff0c;这通常是因为项目的某些部分没有正确初始化或者配置。以下是一些解决步骤。如果缺少build文件&#xff0c;这会导致你使用gradlew assembleRealease失败&#xff0c;进而无法打包APK。下…...

【无需安装额外软件,JavaScript脚本】B站批量取消关注

步骤 注意&#xff1a; 提前选好需要批量取消关注的分组&#xff01;&#xff01;&#xff01;脚本过程中会提示要求输入B站账号的手机号码作为验证&#xff0c;不是封号&#xff0c;只是验证&#xff01;&#xff01;&#xff01; 打开B站关注页面 进入个人关注网页&#xff0…...

【Linux】第十五章 调度未来任务

1.如何调度延迟的用户任务&#xff1f; at 软件包包含 atd守护进程&#xff0c;和一组命令&#xff08;at、atq等&#xff09;。在默认的 RHEL 安装过程中&#xff0c;将自动安装并启用 atd守护进程。root 及普通用户可以使用 at 命令创建计划任务&#xff0c;atd守护进程提供…...