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

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. 列表的操作符
  • +:用于连接两个列表。
  • *:用于重复列表。
  • innot 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 的元素的索引,可选参数 startend 限制搜索范围
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…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...