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

Python编程第09课:Python列表(List)操作完全手册

前言Python最常用的数据结构列表是Python中最常用、最灵活的数据结构。它就像一个容器可以存储任意类型的元素并且可以随时添加、删除或修改元素。无论是处理数据、实现算法还是构建应用程序列表都是你离不开的工具。本课程将系统讲解Python列表的各种操作方法包括创建、访问、切片、添加、删除、排序、搜索等。通过大量的实例演示让你全面掌握列表这个强大的工具。一、列表基础1.1 创建列表# 空列表empty_list[]empty_list2list()# 数值列表numbers[1,2,3,4,5]# 字符串列表fruits[苹果,香蕉,橙子]# 混合类型列表mixed[1,hello,3.14,True]# 使用list()函数创建char_listlist(Python)# [P, y, t, h, o, n]# 嵌套列表matrix[[1,2],[3,4],[5,6]]1.2 访问列表元素fruits[苹果,香蕉,橙子,葡萄]# 正向索引从0开始print(fruits[0])# 苹果print(fruits[1])# 香蕉print(fruits[2])# 橙子print(fruits[3])# 葡萄# 负向索引从-1开始print(fruits[-1])# 葡萄最后一个print(fruits[-2])# 橙子print(fruits[-4])# 苹果# 访问嵌套列表matrix[[1,2,3],[4,5,6],[7,8,9]]print(matrix[0])# [1, 2, 3]print(matrix[0][1])# 2print(matrix[2][-1])# 91.3 列表切片numbers[0,1,2,3,4,5,6,7,8,9]# 基本切片 [start:end]print(numbers[2:6])# [2, 3, 4, 5]print(numbers[0:3])# [0, 1, 2]# 省略start或endprint(numbers[:5])# [0, 1, 2, 3, 4]print(numbers[5:])# [5, 6, 7, 8, 9]print(numbers[:])# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]# 带步长的切片 [start:end:step]print(numbers[::2])# [0, 2, 4, 6, 8]偶数索引print(numbers[1::2])# [1, 3, 5, 7, 9]奇数索引print(numbers[::-1])# [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]反转二、列表操作方法2.1 添加元素# append() - 在末尾添加单个元素fruits[苹果,香蕉]fruits.append(橙子)print(fruits)# [苹果, 香蕉, 橙子]# insert() - 在指定位置插入元素fruits.insert(1,葡萄)print(fruits)# [苹果, 葡萄, 香蕉, 橙子]# extend() - 在末尾添加多个元素fruits.extend([草莓,西瓜])print(fruits)# [苹果, 葡萄, 香蕉, 橙子, 草莓, 西瓜]# 使用 运算符fruits[苹果][香蕉,橙子]print(fruits)# [苹果, 香蕉, 橙子]# 使用 * 运算符重复fruits[苹果]*3print(fruits)# [苹果, 苹果, 苹果]2.2 删除元素fruits[苹果,香蕉,橙子,葡萄,香蕉]# remove() - 删除第一个匹配的元素fruits.remove(香蕉)print(fruits)# [苹果, 橙子, 葡萄, 香蕉]# pop() - 删除并返回指定位置的元素默认最后一个removedfruits.pop()print(f删除的:{removed})# 删除的: 香蕉print(fruits)# [苹果, 橙子, 葡萄]# pop() 指定位置removedfruits.pop(1)print(f删除的:{removed})# 删除的: 橙子print(fruits)# [苹果, 葡萄]# del - 删除指定位置的元素delfruits[0]print(fruits)# [葡萄]# clear() - 清空列表fruits.clear()print(fruits)# []2.3 修改元素fruits[苹果,香蕉,橙子]# 直接通过索引修改fruits[0]草莓print(fruits)# [草莓, 香蕉, 橙子]# 修改切片numbers[0,1,2,3,4,5]numbers[1:4][10,20,30]print(numbers)# [0, 10, 20, 30, 4, 5]# 批量替换numbers[0,1,2,3,4,5]numbers[::2][0,0,0,0,0]print(numbers)# [0, 1, 0, 3, 0, 5]2.4 查找元素fruits[苹果,香蕉,橙子,葡萄,香蕉]# index() - 查找元素索引第一个匹配print(fruits.index(香蕉))# 1print(fruits.index(苹果))# 0# count() - 统计元素出现次数print(fruits.count(香蕉))# 2print(fruits.count(草莓))# 0# in 运算符 - 检查元素是否存在print(苹果infruits)# Trueprint(草莓infruits)# Falseprint(香蕉notinfruits)# False三、列表常用操作3.1 排序numbers[3,1,4,1,5,9,2,6]# sort() - 就地排序修改原列表numbers.sort()print(numbers)# [1, 1, 2, 3, 4, 5, 6, 9]# sort() 降序numbers.sort(reverseTrue)print(numbers)# [9, 6, 5, 4, 3, 2, 1, 1]# sorted() - 返回排序后的新列表numbers[3,1,4,1,5,9,2,6]sorted_numberssorted(numbers)print(sorted_numbers)# [1, 1, 2, 3, 4, 5, 6, 9]print(numbers)# [3, 1, 4, 1, 5, 9, 2, 6]原列表不变# 自定义排序规则students[(小明,85),(小红,92),(小李,78)]students.sort(keylambdax:x[1],reverseTrue)# 按分数降序print(students)# [(小红, 92), (小明, 85), (小李, 78)]3.2 反转fruits[苹果,香蕉,橙子]# reverse() - 就地反转fruits.reverse()print(fruits)# [橙子, 香蕉, 苹果]# 使用切片反转numbers[1,2,3,4,5]reversed_numbersnumbers[::-1]print(reversed_numbers)# [5, 4, 3, 2, 1]3.3 复制# 浅拷贝original[1,2,3]copy1original.copy()copy2list(original)copy3original[:]# 注意浅拷贝对于嵌套列表只拷贝引用nested[[1,2],[3,4]]shallownested.copy()shallow[0][0]99print(nested)# [[99, 2], [3, 4]]原列表也被修改print(shallow)# [[99, 2], [3, 4]]# 深拷贝importcopy nested[[1,2],[3,4]]deepcopy.deepcopy(nested)deep[0][0]99print(nested)# [[1, 2], [3, 4]]原列表不变print(deep)# [[99, 2], [3, 4]]四、列表推导式4.1 基本语法# [表达式 for 变量 in 序列]# 生成1-5的平方squares[x**2forxinrange(1,6)]print(squares)# [1, 4, 9, 16, 25]# 生成偶数的平方even_squares[x**2forxinrange(1,11)ifx%20]print(even_squares)# [4, 16, 36, 64, 100]4.2 嵌套列表推导式# 二维矩阵转置matrix[[1,2,3],[4,5,6],[7,8,9]]transposed[[row[i]forrowinmatrix]foriinrange(len(matrix[0]))]print(transposed)# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]# 展开嵌套列表nested[[1,2,3],[4,5],[6,7,8,9]]flattened[itemforsublistinnestedforiteminsublist]print(flattened)# [1, 2, 3, 4, 5, 6, 7, 8, 9]4.3 条件表达式# if-else 在推导式中numbers[1,2,3,4,5,6]result[xifx%20elsex*2forxinnumbers]print(result)# [2, 2, 6, 4, 10, 6]五、常用内置函数numbers[1,2,3,4,5]# len() - 长度print(len(numbers))# 5# max() - 最大值print(max(numbers))# 5# min() - 最小值print(min(numbers))# 1# sum() - 求和print(sum(numbers))# 15# sum() 带初始值print(sum(numbers,10))# 25# any() - 是否有任意一个为Trueprint(any([0,,None]))# Falseprint(any([0,hello,None]))# True# all() - 是否所有都为Trueprint(all([1,hello,True]))# Trueprint(all([1,,True]))# False# enumerate() - 返回索引和值forindex,valueinenumerate(numbers):print(f{index}:{value})# zip() - 合并多个列表names[Alice,Bob,Charlie]scores[85,92,78]forname,scoreinzip(names,scores):print(f{name}:{score})六、实战项目待办事项管理系统6.1 项目需求添加待办事项查看所有待办事项标记完成状态删除待办事项按优先级排序6.2 完整代码deftodo_manager():待办事项管理程序todos[]# 存储 (优先级, 内容, 完成状态)defshow_menu():print(\n*40)print(待办事项管理系统)print(*40)print(1. 添加待办事项)print(2. 查看所有事项)print(3. 标记完成)print(4. 删除事项)print(5. 按优先级排序)print(0. 退出)print(*40)defadd_todo():contentinput(请输入事项内容: )priorityinput(优先级 (高/中/低) [默认中]: )or中ifprioritynotin[高,中,低]:priority中todos.append(([高,中,低].index(priority),content,False))print(f已添加: [{priority}]{content})defshow_todos():ifnottodos:print(\n暂无待办事项)returnprint(\n待办事项列表:)print(-*40)fori,(p,content,done)inenumerate(todos,1):status✓ifdoneelse○priority[高,中,低][p]linef{i}. [{priority}]{content}{status}print(lineifdoneelseline)defcomplete_todo():show_todos()try:idxint(input(请输入要完成的事项编号: ))-1if0idxlen(todos):p,content,_todos[idx]todos[idx](p,content,True)print(f已标记完成:{content})else:print(无效的编号)exceptValueError:print(请输入有效的数字)defdelete_todo():show_todos()try:idxint(input(请输入要删除的事项编号: ))-1if0idxlen(todos):removedtodos.pop(idx)print(f已删除:{removed[1]})else:print(无效的编号)exceptValueError:print(请输入有效的数字)defsort_todos():todos.sort(keylambdax:(x[2],x[0]))# 按完成状态和优先级排序print(已按优先级排序未完成优先)show_todos()whileTrue:show_menu()choiceinput(\n请输入选项: )ifchoice1:add_todo()elifchoice2:show_todos()elifchoice3:complete_todo()elifchoice4:delete_todo()elifchoice5:sort_todos()elifchoice0:print(感谢使用)breakelse:print(无效的选项)if__name____main__:todo_manager()总结本课程学习了列表创建多种创建方式包括嵌套列表访问元素索引和切片操作增删改查完整的列表操作方法排序与反转sort、sorted、reverse列表推导式简洁的列表创建方式实战项目待办事项管理系统核心要点列表是可变的可以随时修改索引从0开始负索引从-1开始切片操作[ start : end : step ]非常强大列表推导式是创建列表的Pythonic方式注意浅拷贝和深拷贝的区别下一篇预告Python编程第10课Python元组(Tuple)和字典(Dict)详解

相关文章:

Python编程第09课:Python列表(List)操作完全手册

前言:Python最常用的数据结构 列表是Python中最常用、最灵活的数据结构。它就像一个容器,可以存储任意类型的元素,并且可以随时添加、删除或修改元素。无论是处理数据、实现算法还是构建应用程序,列表都是你离不开的工具。 本课程…...

OpenClaw模型量化指南:压缩Qwen2.5-VL-7B提升本地运行效率

OpenClaw模型量化指南:压缩Qwen2.5-VL-7B提升本地运行效率 1. 为什么需要量化多模态大模型 当我第一次在本地MacBook Pro上尝试运行Qwen2.5-VL-7B时,风扇立刻开始狂转,16GB内存几乎被吃满,模型加载就花了近3分钟。这种体验让我意…...

OpenClaw调试技巧大全:Qwen3-14b_int4_awq任务失败排查指南

OpenClaw调试技巧大全:Qwen3-14b_int4_awq任务失败排查指南 1. 为什么我们需要系统化的调试方法 上周我在尝试用OpenClaw自动整理项目文档时,遇到了一个诡异的问题:任务执行到一半突然卡住,既没有报错也没有继续执行。花了整整三…...

一款基于 .NET 开源、跨平台应用程序自动升级组件阅

基础示例:单工作表 Excel 转 TXT 以下是将一个 Excel 文件中的第一个工作表转换为 TXT 的完整步骤: 1. 加载并读取Excel文件 from spire.xls import * from spire.xls.common import * workbook Workbook() workbook.LoadFromFile("示例.xlsx"…...

Docker 容器中运行 AI CLI 工具:用户隔离与持久化卷实战指南撂

环境安装 pip install keystone-engine capstone unicorn 这3个工具用法极其简单,下面通过示例来演示其用法。 Keystone 示例 from keystone import * CODE b"INC ECX; ADD EDX, ECX" try:ks Ks(KS_ARCH_X86, KS_MODE_64)encoding, count ks.asm(CODE)…...

软件人员可以关注的 Skill,亲测确实不错,值得试一下

Agent Skill 是一套标准化的能力封装,它将复杂的、需要多步处理和工具调用的任务,打包成一个可以直接使用的“技能包”。推荐一些在实际工作中表现不错的 Skill: 1. frontend-design 介绍:打造具有高设计质量的独特生产级前端界面…...

和AI一起搞事情#:边剥龙虾边做个中医技能来起号冠

1. 核心概念 在 Antigravity 中,技能系统分为两层: Skills (全局库):实际的代码、脚本和指南,存储在系统级目录(如 ~/.gemini/antigravity/skills)。它们是“能力”的本体。 Workflows (项目级)&#xff1a…...

Blazor组件化演进终极指南:2026年必须掌握的5大架构范式与3种反模式规避清单

第一章:Blazor组件化演进的底层动因与2026技术坐标系Blazor 的组件化并非单纯语法糖的迭代,而是对 Web 前端架构范式、.NET 生态边界以及现代云原生交付链路三重压力下的系统性响应。其底层动因根植于三个不可逆趋势:WebAssembly 运行时成熟度…...

2026年AI热点:阿里新模型领跑行业

今日AI热点汇总(2026年4月9日) 一、阿里发布新模型,性能大幅提升 今天,阿里巴巴重磅推出了全新的通义千问模型,这个新模型在语言理解、逻辑推理和代码生成等方面都有了显著提升。 更强的理解能力:能更准确地…...

普通人也能轻松掌握!5个技巧让你玩转AI大模型,从入门到精通的实用指南!

随着ChatGPT、文心一言、通义千问等AI大模型的普及,很多人都在使用AI大模型,普通人学习时往往陷入“指令说不清楚、输出不符合预期”的困境。其实,学会AI大模型的核心,不在于掌握技术原理,而在于掌握“与大模型高效沟通…...

数据团队该醒醒了:AI智能体不是你的下一个仪表盘闹

7.1 初识三维模型 7.1.1 三维模型的数据载体 随着计算机图形技术的发展,我们或多或少都会见过或者听说过三维模型。笔者始终记得小时候第一次在电视上看到三维动画《变形金刚:超能勇士》的震撼感受;而现在我们已经可以在手机上玩三维游戏《王…...

喔去,litellm 竟然被投毒了,赶紧检查你的机器中招了没有稳

一、什么是setuptools? setuptools 是一个用于创建、分发和安装 Python 包的核心库。 它可以帮助你: 定义 Python 包的元数据(如名称、版本、作者等)。 声明包的依赖项,确保你的包能够正确运行。 构建源代码分发包&…...

旧Mac设备重生指南:使用OpenCore Legacy Patcher升级系统全攻略

旧Mac设备重生指南:使用OpenCore Legacy Patcher升级系统全攻略 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 随着苹果系统的不断更新&#xff…...

RT-Thread实时操作系统入门与实践指南

1. RT-Thread 入门指南:从零开始掌握实时操作系统 RT-Thread 作为一款国产开源实时操作系统(RTOS),近年来在物联网、智能硬件等领域获得了广泛应用。对于嵌入式开发者而言,掌握 RT-Thread 不仅能提升开发效率&#xff…...

OpenClaw小龙虾产品形态

OpenClaw小龙虾产品形态 全文链接:OpenClaw小龙虾产品形态 收录与 OpenClaw 小龙虾 相关的 衍生发行、厂商适配、多智能体栈、本地控制台、垂直场景桌面工作台、便携与移动端交付、具身智能场景原型 等 GitHub 仓库。 第三方与厂商衍生 仓库类别形态 / 场景简介Sta…...

好用有省钱的电脑多开神奇工具

今天,我们要介绍的是一款专为电脑用户设计的神奇软件——Safeboxie多开器。这款软件打破了传统限制,无论是游戏还是其他应用程序,都能轻松实现多开。你是否曾为在电脑上无法同时运行多个游戏或软件而烦恼?Safeboxie多开器将完美解…...

大模型时代,这5大热门职业让你月入50K!错过等一年!

在数字技术迭代速度不断加快的当下,人工智能领域的大模型(Large Models) 已从实验室走向产业落地,成为重构各行业生产模式、驱动创新升级的核心引擎。凭借在数据处理、模式识别、复杂任务决策等方面的超强能力,大模型不…...

值类型与引用类型:别再只背“栈和堆”了,看这 个实际影响骋

基础示例:单工作表 Excel 转 TXT 以下是将一个 Excel 文件中的第一个工作表转换为 TXT 的完整步骤: 1. 加载并读取Excel文件 from spire.xls import * from spire.xls.common import * workbook Workbook() workbook.LoadFromFile("示例.xlsx"…...

PHP 8.9 JIT性能调优黄金三角:opcache.jit、opcache.jit_buffer_size、opcache.jit_hot_func(附生产环境最优参数表)

第一章:PHP 8.9 JIT 编译器架构演进与性能边界认知 PHP 8.9 并非官方发布的正式版本(截至 PHP 官方最新稳定版为 8.3),但本章基于社区前瞻研究与内核补丁集构建的“PHP 8.9 JIT”概念原型,探讨其在 LLVM 后端集成、分层…...

AI Agent 跑完任务怎么通知你?我写了个微信推送服务弦

1、普通的insert into 如果(主键/唯一建)存在,则会报错 新需求:就算冲突也不报错,用其他处理逻辑 回到顶部 2、基本语法(INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)) 语…...

JMS, ActiveMQ 学习一则偌

开发个什么Skill呢? 通过 Skill,我们可以将某些能力进行模块化封装,从而实现特定的工作流编排、专家领域知识沉淀以及各类工具的集成。 这里我打算来一次“套娃式”的实践:创建一个用于自动生成 Skill 的 Skill,一是用…...

为什么你的file_get_contents总崩溃?揭秘PHP 8.3+大文件I/O底层机制与3种替代架构

第一章:为什么你的file_get_contents总崩溃?揭秘PHP 8.3大文件I/O底层机制与3种替代架构当处理超过100MB的文件时,file_get_contents() 在 PHP 8.3 中频繁触发内存溢出(Fatal error: Allowed memory size exhausted)&a…...

Arduino Ethernet库深度解析与W5500硬件协同开发指南

1. Arduino Ethernet库深度解析:嵌入式以太网通信的工程实践指南1.1 库定位与硬件基础Arduino Ethernet库是Arduino官方为以太网通信设计的核心驱动库,专为Arduino Ethernet Shield(基于W5100/W5200/W5500以太网控制器)及兼容硬件…...

ESP32便携电子相册DIY指南:硬件选型与低功耗优化

1. 项目概述:ESP32便携电子相册的核心价值这个项目用ESP32芯片打造了一款可以随身携带的电子相册。相比传统相册,它有几个明显的优势:首先,体积小巧,差不多只有手机大小,可以轻松放进包里;其次&…...

JPEGENC:4KB RAM下运行的嵌入式JPEG编码器

1. JPEGENC:面向资源受限MCU的轻量级JPEG编码器深度解析1.1 设计哲学与工程定位JPEGENC并非对libjpeg或mozjpeg等通用JPEG库的简单裁剪,而是在裸机(Bare-metal)约束下重构的嵌入式专用编码器。其核心设计目标直指MCU开发中最尖锐的…...

嵌入式MCU菜单框架设计与优化实践

1. 项目概述"产品级MCU菜单框架"这个标题背后,隐藏着嵌入式开发中一个经典痛点——如何在资源受限的单片机上实现灵活、可维护的人机交互界面。作为一名在工业控制领域摸爬滚打多年的工程师,我见过太多项目因为前期轻视菜单设计,导…...

VS2019搭建LVGL模拟器提升嵌入式GUI开发效率

1. 项目概述 在嵌入式GUI开发领域,LVGL(Light and Versatile Graphics Library)凭借其轻量级、高性能和跨平台特性,已成为许多开发者的首选方案。但直接在硬件上调试GUI界面往往效率低下,每次修改都需要重新烧录固件。…...

AI落地业务流程:别犯这两个错误!这才是人机协作的正确姿势

很多团队一提到 AI 进入业务流程,最容易滑向两个极端。一个极端是“既然 AI 很强,就让它全自动做完”;另一个极端是“既然不放心,那就什么都别让它碰”。真正能进生产环境的做法,通常都不在这两头。 Human-in-the-Loop…...

SmartComm:零堆内存的嵌入式命令通信框架

1. SmartComm 嵌入式设备间通信库深度解析SmartComm 是一个专为资源受限嵌入式系统设计的轻量级、零堆内存依赖的设备间命令通信框架。它不依赖动态内存分配(malloc/free),全部对象生命周期由栈管理,适用于 STM32F0/F1/F4、ESP32、…...

【数学建模 matlab 实验报告12】聚类分析和判别分析

上一篇:【数学建模 matlab 实验报告11】拟合 目录 实验报告 实验心得 实验报告 代码: [data, txt] xlsread(第13次-聚类分析和判别分析.xlsx); cityNames txt(2:end, 1); data zscore(data); Y_euclidean pdist(data, euclidean); Z_euclidean…...