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

python学习—列表和元组

系列文章目录

python学习—合并TXT文本文件
python学习—统计嵌套文件夹内的文件数量并建立索引表格
python学习—查找指定目录下的指定类型文件
python学习—年会不能停,游戏抽签抽奖
python学习—循环语句-控制流
python学习—合并多个Excel工作簿表格文件


文章目录

  • 系列文章目录
  • 功能说明
  • 1 列表(List)
      • (1) 读取数据
      • (2) 包容性好
      • (3) 截取 切片
      • (4) 列表添加数据(append() )
      • (5) 列表删除数据(del 列表[索引])
      • (6) 列表脚本操作符( + * )
      • (7) 列表函数(len 、 max、 min)
      • (8) 列表方法(extend、count、index、insert、pop、remove、reverse、sort、copy、clear)
  • 2 元组(Tuple)
      • (1) 与列表相同的读取、截取 切片、迭代、+ * 、函数
      • (2) ==区别==
  • 3 浅拷贝 、传递 引用
  • 4 后记


功能说明

本文简单介绍python中的列表(List)和元组(Tuple),它们是python语言的两种基本的数据结构,用于存储有序的元素集合。尽管它们在某些方面相似,但在功能和用途上存在关键区别。

python版本为 python3

  • 列表(List): 列表是可变的(mutable)序列类型,这意味着你可以修改列表中的元素,添加或删除元素。
    语法:用方括号 [] 包围,元素之间用逗号 , 分隔。例如:my_list = [1, 2, 3]
    特性:
    索引:每个元素都分配一个数字作为它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
    动态大小:列表的长度可以在程序运行时改变;
    支持多种数据类型:列表中的元素可以是不同类型的,如整数、字符串、甚至是其他列表;
    可变操作:支持增加、删除、修改元素等操作,如 append(), extend(), pop(), remove() 等方法。
    应用场景:当需要一个可以频繁修改的集合时,比如存储购物车商品列表、动态生成的结果集等。

  • 元组(Tuple):元组是不可变的(immutable)序列类型,一旦创建,就不能更改其中的元素。
    语法:元组用圆括号 () 包围,同样用逗号 , 分隔元素。单个元素的元组需要在元素后加一个逗号,如 (1,)。空元组直接写作 ()。
    特性:
    静态大小:元组创建后,其长度和内容都是固定的,不能增删改元素;
    支持多种数据类型:与列表一样,元组中的元素也可以是不同类型的;
    效率高:由于不可变性,元组在某些情况下比列表更节省内存,访问速度也更快。
    应用场景:当需要一个固定不变的数据集合时,比如表示坐标(x, y)、存储数据库查询结果的列名等

1 列表(List)

(1) 读取数据

列表中数据,叫 元素。

students = ['小明','小红','小刚'] print(students[0])       # 小明     索引为 0 的元素for i in students:print(i+'在不在?')# 小明在不在?
# 小红在不在?
# 小刚在不在?

(2) 包容性好

列表中的元素可以是不同类型的,如整数、字符串、甚至是其他列表。

list1 = ['小明',18,1.70,['小明','小红','小刚']]  

(3) 截取 切片

切片,一次从列表提取多个元素 ,切出来的 还是列表
注意:0 开始起排。

list2 = [5,6,7,8,9]
print(list2[:])                    # [5,6,7,8,9]        
print(list2[2:])                   # [7,8,9]
print(list2[:2])                   # [5,6]
print(list2[1:3])                  # [6,7]
print(list2[2:4])                  # [7,8]
students = ['小明','小红','小刚']
print(students[:2])                # ['小明', '小红']
print(students[2:])                #  ['小刚']
print(students[2])                 #  小刚  索引为2的元素 。

倒数的时刻,从 1 开始。

print(list2[-2])                   # 8   读取列表中倒数第二个元素
print(list2[8])                    # 报错 IndexError: list index out of range。 超出列表长度

总结规则:

  • 左右空,取到头
    冒号左边空,就要从偏移量为0的元素开始取; 右边空,就要取到列表的最后一个元素。

  • 左右不空,左要取,右不取
    冒号左边数字对应的元素要拿,右边的不动。

(4) 列表添加数据(append() )

标准格式: 列表名.append(元素)
在列表末尾添加新的对象

list3 = [1,2]
list3.append(3)   
print(list3)    #[1, 2, 3]list3.append([4,5])
print(list3) 
#[1, 2, 3, [4, 5]]
students = ['小明','小红','小刚']
students.append('小美')
print(students)    
#['小明', '小红', '小刚', '小美']

(5) 列表删除数据(del 列表[索引])

标准格式: del 列表名[元素的索引]

students = ['小明', '小红', '小刚', '小美']
del students[1]           #删除 索引为 1 的元素
print(students)           # ['小明',  '小刚', '小美']
del students[1:]          #删除切片  0到1 
print(students)           # ['小明']del students              #删除 整个 列表
print(students)           # 报错,列表不存在。NameError: name 'students' is not defined。

(6) 列表脚本操作符( + * )

列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

print([1, 2, 3] + [4, 5, 6] )    #[1, 2, 3, 4, 5, 6]
print(['Hello!'] * 4)            #['Hello!', 'Hello!', 'Hello!', 'Hello!']
print(3 in [1, 2, 3])            # True

(7) 列表函数(len 、 max、 min)

list4 = [4, 5, 6, 7, 8, 9]
tuple1 = (1, 2, 3, 4, 5, 6, 7, 8, 9)print(len(list4))            # 列表长度, 6
print(max(list4))            # 列表最大值 9
print(min(list4))            # 列表最小值 4list5 = list(tuple1)         # 元组 转换为  列表
print(list5)                 # [1, 2, 3, 4, 5, 6, 7, 8, 9]

(8) 列表方法(extend、count、index、insert、pop、remove、reverse、sort、copy、clear)

list3 = [1, 2, 3]
list4 = [4, 5, 6, 7, 8, 9]list3.extend(list4)          # extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
print(list3)                 # [1, 2, 3, 4, 5, 6, 7, 8, 9]print(list4.count(4))        # 1    统计某个元素 4  在列表中出现的次数.
print(list3.index(3))        # 2    从列表中找出某个值3  第一个匹配项的索引位置list3.insert(10, 118)        # 将指定对象101   插入列表的指定位置 第10位置 。
print(list3)                 # [1, 2, 3, 4, 5, 6, 7, 8, 9, 118]print(list.pop(list3))       # 118   移除列表中最后一个元素,并且返回该元素的值
print(list3)                 # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list.pop(list3))       # 9    移除列表中最后一个元素,并且返回该元素的值
print(list3)                 # [1, 2, 3, 4, 5, 6, 7, 8]list3.remove(3)              # 移除列表中某个值 3  的第一个匹配项
print(list3)                 # [1, 2, 4, 5, 6, 7, 8]list3.reverse()              # 列表 反转  从最后一个元素开始,依次向前排列
print(list3)                 # [8, 7, 6, 5, 4, 2, 1]
list3.append(119)            # 列表 末位 添加元素  119
print(list3)                 # [8, 7, 6, 5, 4, 2, 1, 119]
list3.sort()                 # 列表 从小到大  升序排序
//如果列表中的元素为字符串,则按照字母顺序排序;如果列表中的元素为数字,则按照大小顺序排序。
print(list3)                 # [1, 2, 4, 5, 6, 7, 8, 119]

2 元组(Tuple)

元组 不同之处在于元组的元素不能修改。索引从0开始,可以进行截取,组合、读取、迭代、函数(len 、 max、 min) 都跟 列表相同。

(1) 与列表相同的读取、截取 切片、迭代、+ * 、函数

eggs = ('hello ', 42, 0.5)
print(eggs[0])                # hello
print(eggs[1:2])              # (42,)      一个元素 后面加 逗号
print(eggs[1:3])              # (42,0.5)     索引值可以超出范围print(eggs[::1])              # ('hello ', 42, 0.5) ,每间隔1个元素,即 步长为1
print(eggs[::2])              #  ('hello ', 0.5)   每间隔2个元素,即 步长为2 ,选择索引为偶数的元素print(len(eggs))              # 3for i in eggs:print(i)
# hello
# 42
# 0.5vegetables = ('carrot', 'cabbage', 'broccoli')
abc = eggs + vegetables        # 合并
print(abc)                     #  ('hello ', 42, 0.5, 'carrot', 'cabbage', 'broccoli')efg = ('fish',)
hij = efg * 3
print(hij)                     # ('fish', 'fish', 'fish')   

(2) 区别

当只有一个元素时,元组 需要在元素后面添加逗号

tuple1 = ('hello',)          # 当只有一个元素时,元组 需要在元素后面添加逗号
print(type(tuple1))          # <class 'tuple'>  数据类型为 元组
list001 = ['hello']
print(type(list001))         # <class 'list'>   数据类型为 列表 

元组 因为不能修改,所以 可用的 方法较少

eggs = ('hello ', 42, 0.5)print(len(eggs))              # 3    统计 元组 内  元素数量。
print(eggs.count('hello '))   # 1   统计 元素 出现次数
print(eggs.index(0.5))        # 2   获取 元素的 索引值del eggs                      # 只能删除整个元组
print(eggs)                   # NameError: name 'eggs' is not defined, 元组 不存在list002 = [1, 2, 3, 4, 5]
tuple002 = tuple(list002)     # 强制 转换 ,将列表转换为  元组
print(tuple002)               # (1, 2, 3, 4, 5)

3 浅拷贝 、传递 引用

浅拷贝 浅拷贝是指创建一个新的数据结构,并且递归地复制原数据结构中第一层的数据,用来 复制列表或字典这样的 可变值,而不是 简单的 引用。

  • 但对于第一层中如果是可变类型的元素(如列表、字典等),则只是复制它们的引用,而不是这些元素内部的数据。
  • 因此,原数据结构和浅拷贝后的数据结构中的第一层数据是完全独立的,
  • 但如果有 可变类型元素,则这些元素仍然共享同一份内存,修改其中一个的内部数据会影响到另一个。
list9 = list3.copy()         # 创建并返回一个当前列表list3 的浅拷贝,浅拷贝意味着list9中的元素与list3中的元素指向相同的内存地址。
print(list9)                 # [1, 2, 4, 5, 6, 7, 8, 119]
list3.clear()                # 清空列表list3  中的所有元素,使其变为一个空列表,但不影响list9中的元素 内存地址。
print(list3)                 # []
print(list9)                 # [1, 2, 4, 5, 6, 7, 8, 119]  list10 = list9               # 将变量list9  赋值给新变量 list10, 指向list9的引用,意味着list9和list10指向同一个列表对象
print(list10)                # [1, 2, 4, 5, 6, 7, 8, 119]
list9.clear()                # 清空列表list9  中的所有元素,使其变为一个空列表。list10指向同一个列表对象,也被清空
print(list9)                 # []
print(list10)                # []  因为list9和list10指向同一个列表对象,list9被清空后,list10也相应地变为空列表

如果 复制的列表里又包含了列表, 就使用 copy.deepcopy()函数来代替。

4 后记

列表与元组的主要区别
可变性:列表是可变的,而元组是不可变的,这是两者最根本的区别。
性能:由于元组的不可变性,它在某些场景下比列表更高效。
应用场景:列表适用于需要频繁修改的数据集合,而元组适用于不需要修改的数据集合,如常量集合或作为字典的键。

如果 需要一个永远不会改变值的序列,就使用元组。
因为不变,所有 python 可实现一些优化,让 使用元组比 列表 运行速度快。

如果需要元组值的一个可变版本,可以将元组转换为 列表。

理解列表和元组的不同,并根据具体需求选择合适的数据结构,是Python编程中的一个重要方面。

相关文章:

python学习—列表和元组

系列文章目录 python学习—合并TXT文本文件 python学习—统计嵌套文件夹内的文件数量并建立索引表格 python学习—查找指定目录下的指定类型文件 python学习—年会不能停&#xff0c;游戏抽签抽奖 python学习—循环语句-控制流 python学习—合并多个Excel工作簿表格文件 文章目…...

c++题目_水仙花数

水仙花数-普及-题目-ACGO题库 题目描述 求100-n中的水仙花数。一个数x&#xff0c;x的百位、十位、个位&#xff0c;分别用a、b、c来表示&#xff1b; 当a * a * a b * b * b c * c * c x时&#xff0c;x就被称为水仙花数。(n< 999) 输入格式 一行一个整数n 输出格式…...

使用 Iceberg、Tabular 和 MinIO 构建现代数据架构

现代数据环境需要一种新型的基础架构&#xff0c;即无缝集成结构化和非结构化数据、轻松扩展并支持高效的 AI/ML 工作负载的基础架构。这就是现代数据湖的用武之地&#xff0c;它为您的所有数据需求提供了一个中心枢纽。然而&#xff0c;构建和管理有效的数据湖可能很复杂。 这…...

jnp.linalg.norm

jnp.linalg.norm 是 JAX 中用于计算向量或矩阵的范数的函数。JAX 是一个用于高性能机器学习研究的 Python 库&#xff0c;它提供了与 NumPy 类似的 API&#xff0c;但支持自动微分和加速计算。jnp 是 JAX 的 NumPy 接口。 jnp.linalg.norm 的基本语法 jnp.linalg.norm(x, ord…...

20240621在飞凌的OK3588-C开发板的Buildroot系统中集成i2ctool工具

20240621在飞凌的OK3588-C开发板中打开i2ctool工具 2024/6/21 17:44 默认继承的i2c工具&#xff1a; rootrk3588-buildroot:/# rootrk3588-buildroot:/# i2c i2c-stub-from-dump i2cdump i2cset i2cdetect i2cget i2ctransfer rootrk3588-…...

ARM32开发--存储器介绍

知不足而奋进 望远山而前行 目录 文章目录 前言 存储器分类 RAM ROM EEPROM Flash 总结 前言 在现代计算机系统中&#xff0c;存储器扮演着至关重要的角色&#xff0c;不仅影响着数据的存取速度和稳定性&#xff0c;还直接关系到计算机系统的性能和应用场景的选择。存…...

Web服务器

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 当在浏览器输入URL后&#xff0c;浏览器会先请求DNS服务器&#xff0c;获得请求站点的 IP 地址&#xff08;即根据URL地址“www.mingrisoft.com”获取…...

大语言模型-Transformer

目录 1.概述 2.作用 3.诞生背景 4.历史版本 5.优缺点 5.1.优点 5.2.缺点 6.如何使用 7.应用场景 7.1.十大应用场景 7.2.聊天机器人 8.Python示例 9.总结 1.概述 大语言模型-Transformer是一种基于自注意力机制&#xff08;self-attention&#xff09;的深度学习…...

POI:接收上传上来的excel,解析并导入到数据库

目录 1、控制层 2、业务层&#xff08;主要逻辑&#xff09; 1、控制层 因为前端设置了只能上传1个文件&#xff0c;这里直接取一个。 RequestMapping(value "/shebeiDaoru.ctrl", method RequestMethod.POST, produces "application/json;charsetUTF-8&q…...

网页的CSS和JavaScript文件没有自动更新, 解决办法

项目场景&#xff1a; 无人值守的场馆预定以及管理 问题描述 更新了CSS和JavaScript&#xff0c;访问始终样式不对 原因分析&#xff1a; 浏览器缓存了你的CSS和JavaScript文件 浏览器缓存了你的CSS和JavaScript文件。当文件的修改时间戳&#xff08;last-modified&#xff…...

Go语言 获取服务器资源磁盘Disk情况

1、获取整个磁盘的总量、已使用量、使用率 package mainimport ("fmt""github.com/shirou/gopsutil/disk""log" )func main() {// 获取所有挂载点的磁盘使用率信息partitions, err : disk.Partitions(false)if err ! nil {log.Fatalf("Err…...

使用上海云盾 CDN 和 CloudFlare 后 Nginx、 WordPress、 Typecho 获取访客真实 IP 方法

最近因为被 DDoS/CC 攻击的厉害,明月就临时的迁移了服务器,原来的服务器就空置下来了,让明月有时间对服务器进行了重置重新部署安装生产环境。因为站点同时使用了上海云盾和 CloudFlare(具体思路可以参考【国内网站使用国外 CloudFlare CDN 的思路分享】一文)两个 CDN 服务…...

深入探究RTOS的任务调度

阅读引言&#xff1a; 此文将会从一个工程文件&#xff0c; 一步一步的分析RTOS的任务调度实现&#xff0c; 这里选用FreeRTOS分析&#xff0c; 别的也差不多的&#xff0c; 可能在细节上有少许不一样。 目录 1&#xff0c; 常见嵌入式实时操作系统 2&#xff0c; 任务调度的…...

【shell脚本速成】函数

文章目录 一、函数1.1、函数介绍1.2、函数定义1.3、函数调用 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻&#xf…...

拒绝零散碎片, 一文理清MySQL的各种锁

系列文章目录 学习MySQL先有全局观&#xff0c;细说其发展历程及特点 Mysql常用操作&#xff0c;谈谈排序与分页 拒绝零散碎片&#xff0c; 一文理清MySQL的各种锁&#xff08;收藏向&#xff09; 系列文章目录一、MySQL的锁指什么二、排他与共享三、全局锁&#xff08;Global…...

P5711 【深基3.例3】闰年判断

1. 题目链接 https://www.luogu.com.cn/problem/P5711 P5711 【深基3.例3】闰年判断 2. 题目描述 题目描述&#xff1a;判断一个数是否是闰年 输入&#xff1a;输入一个整数n 输出&#xff1a;输出1或0&#xff0c;如果是闰年&#xff0c;输出1&#xff0c;否则输出0 3. 我的…...

基于Raft算法实现的分布式键值对存储系统——学习笔记

目录 1 基于Raft算法实现的分布式键值对存储系统 1.1 模块 2 Raft 算法 2 .1 概念 2.2 raft角色&#xff08;先简单了解&#xff0c;方便后续阅读&#xff09; 2.3 raft想解决什么问题&#xff1f; 2.4 选举领导 2.5 领导者故障 附录&#xff1a; 参考文献&#xff1…...

秋招突击——6/17——复习{整理昨天的面试资料}——新作{删除链表倒数第n个节点}

文章目录 引言复习新作删除链表倒数第N个节点题目描述个人实现参考实现 总结 引言 主管面&#xff0c;面的很凄惨&#xff0c;不过无所谓了&#xff0c;我已经尽力了。上午都在整理的面经&#xff0c;没有复习算法&#xff0c;而且这两天要弄一下论文&#xff0c;二十号就要提…...

宝塔面板使用技巧(pure-FTP)上传文件和文件夹默认权限644的修改

前言 科技在进步各种各样的开源软件和库让我们应接不暇&#xff0c;我估计现在所有做php开发的人员都知道宝塔面板&#xff0c;我就经常用&#xff0c;但是不知道大家出现过一个问题不就是在我们开发过程中需要实时的给服务器上传我们开发的文件那么就涉及到了宝塔自带的pure-F…...

mac m芯片安装win11遇坑

mac m芯片安装win11遇坑 1、下载arm架构镜像 磁力链接&#xff1a; magnet:?xturn:btih:e8c15208116083660709eac9aee124e025c01447&dnSW_DVD9_Win_Pro_11_22H2_64ARM_ChnSimp_Pro_Ent_EDU_N_MLF_X23-12755.ISO&xl57198960642、使用VMWare Fusion安装&#xff0c;启…...

绿色低碳+高效交付:中集模块化数据中心用实力印证中国方案全球竞争力

随着人工智能与绿色转型成为全球经济增长核心引擎&#xff0c;高算力需求正推动数据中心建设向预制化、高效能方向加速演进。中集集团&#xff08;000039.SZ/2039.HK&#xff09;凭借工业化制造与全球交付优势&#xff0c;2025年在模块化数据中心&#xff08;AIDC&#xff09;领…...

人工智能高质量数据集概述

人工智能高质量数据集&#xff0c;是指经过标准化采集、清洗、标注、质检、脱敏及结构化处理&#xff0c;能够直接用于人工智能模型开发、训练与优化&#xff0c;且能有效提升模型性能、保障模型泛化能力&#xff0c;具备高可用性、高一致性、高安全性和高适配性的结构化或非结…...

WarcraftHelper终极指南:让魔兽争霸3在现代系统完美重生

WarcraftHelper终极指南&#xff1a;让魔兽争霸3在现代系统完美重生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑上的各…...

EasyAnimateV5-7b-zh-InP在计算机网络教学视频生成中的应用

EasyAnimateV5-7b-zh-InP在计算机网络教学视频生成中的应用 1. 引言 计算机网络课程的教学一直面临着一个难题&#xff1a;如何将抽象的网络协议、拓扑结构和数据传输过程直观地展示给学生。传统的静态图片和文字描述往往难以让学生真正理解数据包是如何在网络中流动的&#…...

Spring Boot 3.1 新特性解析与实践

Spring Boot 3.1 新特性解析与实践 前言 核心新特性 1. 虚拟线程支持 Spring Boot 3.1 基于 Java 21&#xff0c;正式支持虚拟线程&#xff08;Virtual Threads&#xff09;&#xff1a; Configuration public class ThreadConfig {Beanpublic ExecutorTaskExecutor taskExecut…...

MATLAB图表美化指南:xlabel/ylabel上标下标的5种高级用法

MATLAB图表美化指南&#xff1a;xlabel/ylabel上标下标的5种高级用法 在数据可视化领域&#xff0c;MATLAB作为一款强大的科学计算软件&#xff0c;其图表绘制功能一直被科研人员和工程师广泛使用。然而&#xff0c;许多用户在基础绘图之外&#xff0c;往往忽略了坐标轴标签这一…...

cutlass代码架构分析

CUTLASS 代码架构分析 本文档基于 cutlass代码进行梳理,快速理解 CUTLASS 4.x 的模块边界与调用链路。 1. 总体架构 CUTLASS 本质上是一个 header-only 的 CUDA C++ 模板库,外围配套了可选构建目标: include/:核心库(cutlass + cute) tools/:库实例化、性能测试与通用…...

NaViL-9B多模态模型5分钟快速部署:图文问答零基础入门教程

NaViL-9B多模态模型5分钟快速部署&#xff1a;图文问答零基础入门教程 1. 认识NaViL-9B多模态模型 NaViL-9B是上海人工智能实验室推出的原生多模态大语言模型&#xff0c;它不仅能像传统语言模型一样处理纯文本问答&#xff0c;还具备强大的图片理解能力。这意味着你可以上传…...

本地Cookie导出终极指南:Get cookies.txt LOCALLY 安全使用教程

本地Cookie导出终极指南&#xff1a;Get cookies.txt LOCALLY 安全使用教程 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 你是否曾担心浏览器Coo…...

致远OA任意文件上传漏洞的深度利用与防御策略

致远OA文件上传漏洞的攻防全景解析与企业级防护指南 1. 漏洞背景与影响范围 致远OA作为国内广泛使用的协同办公系统&#xff0c;其安全性直接影响数百万企业的数据资产。近年来曝光的任意文件上传漏洞因其高危害性成为攻击者重点利用目标。该漏洞允许攻击者在未授权情况下上传恶…...