当前位置: 首页 > 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…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

如何在网页里填写 PDF 表格?

有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据&#xff…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...