6.python列表
Python 列表 (List) 深度总结
文章目录
- Python 列表 (List) 深度总结
- 1. 列表的基本概念
- 2. 访问列表中的元素
- 3. 修改列表
- 4. 删除列表元素
- 5. 列表的操作符
- 6. 列表的内置函数
- 7. 列表的方法
- 8. 列表的高级用法
- 8.1 列表推导式 (List Comprehensions)
- 8.2 列表的浅拷贝与深拷贝
- 8.3 列表的性能优化
- 9. 列表的多线程和并发处理
- 10. 列表的国际化和本地化
- 总结
列表是 Python 中最常用的数据结构之一,它是一个有序的、可变的集合,允许存储不同类型的元素。列表使用方括号
[] 来表示,并且可以通过索引和切片来访问、修改和操作其中的元素。
1. 列表的基本概念
- 有序性:列表中的元素按照插入的顺序排列,每个元素都有一个唯一的索引。
- 可变性:列表是可变的(mutable),意味着你可以在创建后修改、添加或删除其中的元素。
- 异构性:列表可以包含不同类型的元素,如整数、字符串、浮点数、其他列表等。
# 创建列表
list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5]
list3 = ["a", "b", "c", "d"]
2. 访问列表中的元素
- 索引:使用方括号
[]和索引值来访问单个元素。索引从 0 开始,负索引从 -1 开始表示从末尾开始计数。 - 切片:使用
[start:end:step]语法来获取子列表。start是起始索引,end是结束索引(不包括),step是步长。
# 访问元素
print(list1[0]) # 输出: physics
print(list2[-1]) # 输出: 5
print(list2[1:5]) # 输出: [2, 3, 4, 5]
print(list2[::2]) # 输出: [1, 3, 5]
3. 修改列表
- 更新元素:可以直接通过索引赋值来修改列表中的元素。
- 添加元素:
append():在列表末尾添加一个元素。extend():将另一个序列(如列表、元组)中的所有元素添加到当前列表末尾。insert(index, element):在指定位置插入一个元素。
# 更新元素
list1[2] = 2001
print(list1) # 输出: ['physics', 'chemistry', 2001, 2000]# 添加元素
list1.append('math')
print(list1) # 输出: ['physics', 'chemistry', 2001, 2000, 'math']list1.extend([2023, 'biology'])
print(list1) # 输出: ['physics', 'chemistry', 2001, 2000, 'math', 2023, 'biology']list1.insert(1, 'biology')
print(list1) # 输出: ['physics', 'biology', 'chemistry', 2001, 2000, 'math', 2023, 'biology']
4. 删除列表元素
del语句:通过索引删除指定位置的元素。pop()方法:移除并返回指定位置的元素,默认移除最后一个元素。remove()方法:移除第一个匹配的元素。
# 删除元素
del list1[2]
print(list1) # 输出: ['physics', 'biology', 2000, 'math', 2023, 'biology']popped_element = list1.pop()
print(popped_element) # 输出: biology
print(list1) # 输出: ['physics', 'biology', 2000, 'math', 2023]list1.remove('biology')
print(list1) # 输出: ['physics', 2000, 'math', 2023]
5. 列表的操作符
+:用于连接两个列表。*:用于重复列表。in和not in:用于检查某个元素是否存在于列表中。for循环:用于遍历列表中的元素。
# 列表操作符
list_a = [1, 2, 3]
list_b = [4, 5, 6]combined_list = list_a + list_b
print(combined_list) # 输出: [1, 2, 3, 4, 5, 6]repeated_list = ['Hi!'] * 4
print(repeated_list) # 输出: ['Hi!', 'Hi!', 'Hi!', 'Hi!']print(3 in list_a) # 输出: True
print(7 not in list_a) # 输出: Truefor item in list_a:print(item, end=' ') # 输出: 1 2 3
6. 列表的内置函数
Python 提供了一些内置函数来处理列表:
| 函数 | 描述 |
|---|---|
len(list) | 返回列表的长度 |
max(list) | 返回列表中的最大值 |
min(list) | 返回列表中的最小值 |
sum(list) | 返回列表中所有元素的和(仅适用于数值列表) |
sorted(list) | 返回一个新的排序后的列表,原列表不变 |
numbers = [3, 1, 4, 1, 5, 9]print(len(numbers)) # 输出: 6
print(max(numbers)) # 输出: 9
print(min(numbers)) # 输出: 1
print(sum(numbers)) # 输出: 23
print(sorted(numbers)) # 输出: [1, 1, 3, 4, 5, 9]
7. 列表的方法
Python 列表提供了许多内置方法,用于对列表进行各种操作:
| 方法 | 描述 |
|---|---|
list.append(x) | 在列表末尾添加一个元素 x |
list.extend(iterable) | 将 iterable 中的所有元素添加到列表末尾 |
list.insert(i, x) | 在索引 i 处插入元素 x |
list.remove(x) | 移除列表中第一个等于 x 的元素 |
list.pop([i]) | 移除并返回索引 i 处的元素,默认移除最后一个元素 |
list.clear() | 移除列表中的所有元素 |
list.index(x[, start[, end]]) | 返回列表中第一个等于 x 的元素的索引,可选参数 start 和 end 限制搜索范围 |
list.count(x) | 返回列表中等于 x 的元素的数量 |
list.sort(key=None, reverse=False) | 对列表进行原地排序,key 参数指定排序依据,reverse 参数指定是否降序 |
list.reverse() | 反转列表中的元素顺序 |
list.copy() | 返回列表的一个浅拷贝 |
# 列表方法示例
fruits = ['apple', 'banana', 'cherry']fruits.append('orange')
print(fruits) # 输出: ['apple', 'banana', 'cherry', 'orange']fruits.extend(['grape', 'melon'])
print(fruits) # 输出: ['apple', 'banana', 'cherry', 'orange', 'grape', 'melon']fruits.insert(1, 'pear')
print(fruits) # 输出: ['apple', 'pear', 'banana', 'cherry', 'orange', 'grape', 'melon']fruits.remove('banana')
print(fruits) # 输出: ['apple', 'pear', 'cherry', 'orange', 'grape', 'melon']popped_fruit = fruits.pop()
print(popped_fruit) # 输出: melon
print(fruits) # 输出: ['apple', 'pear', 'cherry', 'orange', 'grape']print(fruits.index('cherry')) # 输出: 2print(fruits.count('apple')) # 输出: 1fruits.sort()
print(fruits) # 输出: ['apple', 'cherry', 'grape', 'orange', 'pear']fruits.reverse()
print(fruits) # 输出: ['pear', 'orange', 'grape', 'cherry', 'apple']new_fruits = fruits.copy()
print(new_fruits) # 输出: ['pear', 'orange', 'grape', 'cherry', 'apple']fruits.clear()
print(fruits) # 输出: []
8. 列表的高级用法
8.1 列表推导式 (List Comprehensions)
列表推导式是一种简洁的方式来创建列表。它允许你在一行代码中生成复杂的列表。
# 基本列表推导式
squares = [x**2 for x in range(10)]
print(squares) # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 带条件的列表推导式
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares) # 输出: [0, 4, 16, 36, 64]# 嵌套列表推导式
matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]flattened = [num for row in matrix for num in row]
print(flattened) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
8.2 列表的浅拷贝与深拷贝
- 浅拷贝:只复制列表的第一层元素,对于嵌套的列表,内部的列表仍然是引用。
- 深拷贝:递归地复制整个列表及其嵌套的子列表。
import copy# 浅拷贝
original = [1, 2, [3, 4]]
shallow_copy = original.copy()original[2][0] = 'changed'
print(original) # 输出: [1, 2, ['changed', 4]]
print(shallow_copy) # 输出: [1, 2, ['changed', 4]]# 深拷贝
deep_copy = copy.deepcopy(original)
original[2][0] = 'again changed'
print(original) # 输出: [1, 2, ['again changed', 4]]
print(deep_copy) # 输出: [1, 2, ['changed', 4]]
8.3 列表的性能优化
- 避免频繁的
append()操作:如果需要构建一个大列表,尽量使用extend()或者列表推导式,而不是多次调用append()。 - 预分配内存:如果你知道最终列表的大小,可以预先分配足够的内存,减少内存重新分配的次数。
- 使用
deque:如果你需要频繁地在列表的两端进行插入和删除操作,考虑使用collections.deque,它在两端操作时效率更高。
from collections import deque# 使用 deque 进行高效的两端操作
queue = deque(['apple', 'banana', 'cherry'])
queue.appendleft('pear')
queue.append('orange')
print(queue) # 输出: deque(['pear', 'apple', 'banana', 'cherry', 'orange'])queue.popleft()
print(queue) # 输出: deque(['apple', 'banana', 'cherry', 'orange'])
9. 列表的多线程和并发处理
由于列表是可变的,多个线程同时修改同一个列表时可能会导致竞争条件。为了确保线程安全,可以使用 threading.Lock 或者 queue.Queue 来保护共享资源。
import threading
import queue# 使用 Queue 实现线程安全的列表操作
q = queue.Queue()def worker():while True:item = q.get()if item is None:breakprint(f'Processing {item}')q.task_done()threads = []
for i in range(5):t = threading.Thread(target=worker)t.start()threads.append(t)for item in range(20):q.put(item)q.join()for _ in range(5):q.put(None)for t in threads:t.join()
10. 列表的国际化和本地化
虽然列表本身没有直接涉及国际化和本地化的功能,但在处理多语言数据时,你可以结合 gettext 模块来实现列表内容的翻译。
import gettext# 加载翻译文件
translator = gettext.translation('messages', localedir='locales', languages=['fr'])
_ = translator.gettextfruits = ['apple', 'banana', 'cherry']
translated_fruits = [_(fruit) for fruit in fruits]
print(translated_fruits) # 输出: ['pomme', 'banane', 'cerise']
总结
通过上述详细的解释,我们全面介绍了 Python 列表的基本概念、访问方式、修改操作、内置函数和方法、高级用法以及性能优化技巧。列表是 Python 中非常强大且灵活的数据结构,掌握这些知识可以帮助你在编写代码时更加高效地处理和操作数据。
如果你有任何具体问题或需要进一步的解释,请随时告诉我!
相关文章:
6.python列表
Python 列表 (List) 深度总结 文章目录 Python 列表 (List) 深度总结1. 列表的基本概念2. 访问列表中的元素3. 修改列表4. 删除列表元素5. 列表的操作符6. 列表的内置函数7. 列表的方法8. 列表的高级用法8.1 列表推导式 (List Comprehensions)8.2 列表的浅拷贝与深拷贝8.3 列表…...
Android中bindService和startService启动服务有何区别
Android中bindService和startService启动服务有何区别 bindService 和 startService 是 Android 中两种用于与 Service 交互的方式,它们的区别主要在于 生命周期管理 和 使用场景。以下是详细对比: 1. bindService方式 bindService 是一种绑定方式&am…...
超牛免费 机械臂模型、工业机器人模型下载网站集合
机械臂是一种高精度、多输入多输出的复杂系统,能够模仿人手的动作,按照给定程序、轨迹和要求实现自动抓取、搬运等功能。它通常由执行机构、驱动装置、控制系统以及传感器等组成,能够完成各种复杂的动作。 机械臂在工业、医学、娱乐、…...
引领未来的变革:15种前沿RAG技术及其应用探索
在现代人工智能领域,检索增强生成(RAG)技术逐渐成为推动各种应用的重要力量。这些技术通过结合信息检索与文本生成,能够更有效地处理和利用信息。本文将详细介绍15种前沿RAG技术及其具体应用实例,以帮助您更好地理解这…...
Scala泛型应用场景
Scala中的泛型(Generics)是一种强大的工具,允许开发者编写可重用的代码,同时保持类型安全。泛型在Scala中有多种应用场景,以下是一些常见的应用场景: 集合类: Scala的集合类(如List…...
AI监控赋能健身馆与游泳馆全方位守护,提升安全效率
一、AI视频监控技术的崛起 随着人工智能技术的不断发展,AI视频监控正成为各行业保障安全、提升效率的关键工具。相比传统监控系统,AI技术赋予监控系统实时分析、智能识别和精准预警的能力,让“被动监视”转变为“主动防控”。 二、AI监控应用…...
Avalonia实战实例二:添加三种状态的Svg图片按钮
文章目录 一、Avalonia和WPF中Style的不同1、Avalonia中舍弃了触发器2、Avalonia中Style不再使用x:Key命名区分二、使用Svg图片控件三、实现三种状态的按钮1、使用转换器2、伪类选择接着上一篇:使用Prism创建项目,并创建窗口 这一篇主要是添加: 两个Svg图片按钮,并包含三种…...
基于注意力的几何感知的深度学习对接模型 GAABind - 评测
GAABind 作者是苏州大学的生物基础与医学院, 期刊是 Briefings in Bioinformatics, 2024, 25(1), 1–14。GAABind 是一个基于注意力的几何感知蛋白-小分子结合模式与亲和力预测模型,可以捕捉小分子和蛋白的几何、拓扑结构特征以及相互作用。使用 PDBBind2020 和 CASF2016 作…...
arcGIS使用笔记(无人机tif合并、导出、去除黑边、重采样)
无人机航拍建图之后,通过大疆智图软件可以对所飞行的区域的进行拼图,但是如果需要对拼好的图再次合并,则需要利用到arcGIS软件。下面介绍arcGIS软件在这个过程中常用的操作。 1.导入tif文件并显示的方法:点击“”图标进行导入操作…...
Color-Light-Control-and-Four-Way-Responder based on STM32F103C8T6
Light Control and Responder 若要实现同样效果请看源码: gitee.com/apollo_666/Color-Light-Control-and-Four-Way-Responder # Abstract The design project for a decorative lighting controller enhanced our practical skills and engineering capabilities. During our…...
openGauss开源数据库实战二十八
文章目录 任务二十八 基于PowerDesigner的openGauss数据库设计任务目标实施步骤一、在Win11上安装 PowerDesigner16二、PowerDesigner快速入门1.启动和配置E-R概念建模2.创建数据项3.创建域4.创建实体5.创建两个实体之间的联系 三、PowerDesigner上的E-R建模1.只有单值属性的简…...
Vue3之响应式系统详解
Vue3中的响应式系统是其核心功能之一,它使得数据变化能够自动触发视图更新,从而简化了开发过程,提高了开发效率。本文将详细阐述Vue3中的响应式系统,包括其核心概念、工作原理、实现方式、应用场景以及优势。同时,本文…...
Kafka 的配置文件
broker.id1:为 broker 指定一个唯一的 ID。 listenersPLAINTEXT://x.x.x.x:xxx:指定 broker 监听的协议、IP 地址和端口。 num.network.threads3:指定用于处理网络请求的线程数。 num.io.threads8:指定用于 I/O 操作的线程数。…...
【系统思辨】分散注意
注意力在我们的日常生活和工作中扮演着至关重要的角色。注意力可以提高效率和准确性、减少错误和失误,提升学习效率,促进创造力。与此同时,各种各样的生活事件在分散我们的注意力,并且还有很多分散我们注意的手段,比如…...
单幅图像合成 360° 3D 场景的新方法:PanoDreamer,可同时生成全景图像和相应的深度信息。
论文介绍了一种从单幅图像合成 360 3D 场景的新方法。该方法以连贯的方式生成全景图及其相应的深度,解决了现有最先进方法(如 LucidDreamer 和 WonderJourney 的局限性。这些方法按照生成轨迹依次添加细节,通常在循环回输入图像时导致可见的接…...
Python课设-谁为影狂-豆瓣数据【数据获取与预处理课设】
🏆 作者简介:席万里 ⚡ 个人网站:https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜,同时略懂Vue与React前端技术,也了解一点微信小程序开发。 🍻 对计算机充满兴趣,愿意并且希望学习更多的技…...
关卡选择与布局器
unity布局管理器 使用unity布局管理器轻松对关卡选择进行布局。 实现过程 准备普通按钮button设置字体和对应的sprite设置父gameobject(levelbase) 再创建UI.image(selectbackground)布局背景和大小gameobject(grid…...
评估一套呼叫中心大模型呼出机器人的投入回报比?
评估一套呼叫中心大模型呼出机器人的投入回报比? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 评估一套呼叫中心大模型呼出机器人的投入回报比(ROI),是一个涉…...
面向对象的 CLI:使用 Fire 简化类和对象的方法暴露 (中英双语)
面向对象的 CLI:使用 Fire 简化类和对象的方法暴露 在传统的命令行工具开发中,argparse 是最常用的库之一,用于处理命令行参数和配置。它通常用于函数式编程,但在处理类和对象时,使用起来可能不如 Fire 方便。Fire 是…...
flutter控件buildDragTargetWidget详解
文章目录 1. DragTarget 的核心概念基本属性 2. 基本用法3. 使用 buildDragTargetWidget4. 常见场景5. 注意事项 buildDragTargetWidget 不是 Flutter 中的内置 API 或方法,但根据命名习惯,它很可能是您正在实现或使用的一个方法,用于在 Flut…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
