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编程中的一个重要方面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/31717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

处理导入Excel文件过大导致Zip bomb detected的问题

处理导入Excel文件过大导致Zip bomb detected的问题 处理导入Excel文件过大导致Zip bomb detected的问题解决方案完整示例代码处理内存溢出问题优化处理大文件的策略 处理导入Excel文件过大导致Zip bomb detected的问题 在Java应用中导入Excel文件时&#xff0c;可能会遇到文件…

大语言模型-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;的深度学习…

算法篇-二叉树

二叉树的遍历 分为前序、中序和后续的遍历&#xff0c;思想就是利用递归。 前序遍历-中左右 代码&#xff1a; public void travelTree(TreeNode node, List<Integer> resulst) {if (node null){return;}// 中resulst.add(node.val);// 左travelTree(node.left, resul…

DN-DETR

可以看到&#xff0c;与 DAB-DETR 相比&#xff0c;最大的差别仍然在 decoder 处&#xff0c;主要是 query 的输入。DN-DETR 认为可以把对 offsets 的学习&#xff0c;看作一种对噪声学习的过程&#xff0c;因此&#xff0c;可以直接在 GT 周围生成一些 noised boxes&#xff0…

【机器学习】transformer框架理论详解和代码实现

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

hive拉链表详解

1、背景描述 在数据仓库中,维度表中的数据会随着时间发生变化。当我们把维度表数据同步到数仓以后,对于后续更新数据,如果直接覆盖原有数据,则历史数据丢失导致不能获取历史某个时间节点的数据指标;如果分区全量冗余存储,又会造成资源浪费;如果增量分区冗余存储,又不便…

HTML(8)——CSS选择器

目录 CSS引入方式 选择器 标签选择器 类选择器 id选择器 通配符选择器 CSS层叠样式表是一种样式表语言&#xff0c;用来描述HTML文档的呈现 书写位置&#xff1a;title标签下方添加style双标签&#xff0c;style标签里写CSS代码 <title>css</title> <st…

Tower 使用指南

Tower 使用指南 目录 打开 git 仓库查看分支历史切换分支提交修改推送修改创建标签自动拉取最新代码 打开 git 仓库 File -> Open然后选择项目目录 查看分支历史 切换分支 提交修改 推送修改 创建标签 自动拉取最新代码

【阿里云服务器】【弹性云服务ECS】通过ssh登录远程服务器

一、操作系统 使用Windows11主机上的Ubuntu子系统&#xff0c;如下图所示&#xff1a; 二、云服务器登录方法 需知道&#xff1a;服务器ip地址、登录名和自己设置的登录密码&#xff1a; 上述系统用户名为root&#xff0c;需要在Ubuntu子系统中同样切换至root用户&#xff…

3GPP R18冻结,哪些信息值得关注?

这两天网上到处都是R18冻结的新闻&#xff0c;小枣君也凑个热闹&#xff0c;聊聊这个话题。 首先给小白科普一下&#xff0c;所谓的R18&#xff0c;全称是Release-18。它是通信国际标准组织3GPP&#xff08;第三代合作伙伴计划&#xff09;所推出协议标准的一个版本。 自从1998…

Ubuntuwin11双系统

一、准备工作 win11与ubuntu20.4双系统安装案例教程,先查看引导模式参数不服则不要安装否则会报异常 查看BIOS引导模式 查看磁盘分区格式 下载Ubuntu镜像 所有版本下载地址,我的华为云镜像ubuntu20.4这个版本地址

凯迪仕霸榜全渠道TOP1 全域曝光100亿

618年中狂欢盛典&#xff0c;已正式落下帷幕。智能锁行业领头羊凯迪仕&#xff0c;凭借过硬的科技产品力和品牌势能&#xff0c;在全域流量加持以及传奇大师K70新品强势曝光之下&#xff0c;霸榜天猫、京东、抖音各平台&#xff0c;稳居各类型榜单榜首&#xff0c;继续以行业领…

Python xlrd库:读excel表格

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

带颜色的3D点云数据发布到ros1中(通过rviz显示)python、C++

ros中发布点云数据xyz以及带颜色的点云数据xyzrgb ros中发布点云数据xyz可以直接用python来做或者C(看个人偏好) ros中发布带颜色的点云数据xyzrgb环境1.新建ROS工作空间2.创建功能包 ros中发布点云数据xyz 可以直接用python来做或者C(看个人偏好) 在这里我们带有颜色的点云数…

TikTok 推出专属AI 内容工具

TikTok最近推出了一款极具实用性的新工具包——TikTok Symphony。它融合了生成式人工智能技术&#xff0c;让内容创作变得更加迅速和便捷。 无论是营销人员还是创作者&#xff0c;都能在TikTok上轻松制作出高质量的内容。Symphony将人类的创造力与AI的高效性完美融合&#xff0…

市值3万亿英伟达的崛起:技术、坚持与市场的力量,厚积薄发的经典案例

在科技领域&#xff0c;英伟达&#xff08;NVIDIA&#xff09;的故事无疑是一个厚积薄发的经典案例。作为一家专注于图形处理单元&#xff08;GPU&#xff09;的公司&#xff0c;英伟达用31年的时间证明了技术的价值、计算的价值和坚持的价值。本文将详细探讨英伟达如何从一家市…

算法题day48(补6.3日卡:dp07)

一、多重背包理论基础&#xff1a; 有N种物品和一个容量为V 的背包。第i种物品最多有Mi件可用&#xff0c;每件耗费的空间是Ci &#xff0c;价值是Wi 。求解将哪些物品装入背包可使这些物品的耗费的空间 总和不超过背包容量&#xff0c;且价值总和最大。 其实就是变相的01背包…

python-Langchain-Chatchat+ChatGLM2-6B在16G内存电脑上运行

python-Langchain-Chatchat+ChatGLM2-6B在16G内存电脑上运行 下载代码ChatGLMLangchain-Chatchat环境准备下载模型Langchain-Chatchat配置configs中example文件修改configs/model_config.py修改修改 server配置知识库初始化启动项目遇到的报错参考链接下载代码 ChatGLM https…

如何系列 如何学习外企英语(持续学习中...)

文章目录 背景计划相关软件和资料单词 短语 背景 软件开发行业&#xff0c;想进外企或者已在外企进行英语提升。 计划 1.每天最少30分钟多邻国。 2.记录平常工作中遇到的句子和单词&#xff0c;并给出分析和示例。 3.把手机和电脑等都调成英文。 4.听 podcast 磨耳朵(pod…

【Go】十四、图形验证码、短信验证码、注册接口与redis的简单使用

图形验证码 如何嵌入图形验证码工作&#xff1a; 这里选择使用captcha 开源库进行验证码设计&#xff1a; 选用下面的地址进行验证码开发工作 https://zh.mojotv.cn/go/refactor-base64-captcha 基础功能构建 在 api 目录下创建 captcha.go 用来编写验证码操作 package …