[Python] 深入理解列表和元组

在学习的C语言中有数组可以用来存储数据,那么在Python中是否也有这样的工具呢?接下来让可莉来给大家讲解列表和元组这两个强力工具吧~

                                     

                                        专栏:《Python》

                                        blog:Keven ’ s blog

在 Python 中,列表和元组是两种常用的序列数据类型,用于存储和操作一组数据。虽然它们的用

途相似,但它们在一些方面有很大的不同。在本篇博客中,可莉将跟着大家一起深入了解它们的特

点、用法和区别。

列表

在编程中,我们经常需要变量来保存数据,如果要保存的数据数量较少的话我们可以创建变量来进行保存,那如果数据很多呢?这时候就要引入列表的概念了。

创建列表

创建列表有两种方式:

alist = [ ] #第一种
alist = list() #第二种

print(type(alist))

如果需要往里面设置初始值, 可以直接写在 [ ] 当中

alist = [1, 2, 3, 4]
print(alist)

与Java和C++不同,在列表中可以存储不同类型的数据

alist = [1, 'hello', True]
print(alist)

访问下标

我们可以用下标运算符[ ] 来访问列表中的任意元素。通常,我们把 [ ] 中填写的数字成为下标或者索引。

alist = [1, 2, 3, 4]
print(alist[2])

下标是从0开始的,也就是说0对应的是列表中第一个元素,1对应的第二个元素,以此类推,如果列表的大小是n个元素,那么最大的下标就是n - 1。

通过下标不仅能访问数据,也能修改数据:

alist = [1, 2, 3, 4]
alist[2] = 100
print(alist)

当访问元素时下标超出有效范围时,程序会抛出异常:

alist = [1, 2, 3, 4]
print(alist[100])

我们可以用len来得到列表的大小:

alist = [1, 2, 3, 4]
print(len(alist))

通过len得到列表大小后在之后的运用中会使操作更加方便。

在Python中一个与C++,Java不同的地方就是它的列表元素可以用负数下标来获取,具体对应元素如下图所示。

我们通过代码运行看下:

alist = [1, 2, 3, 4]
print(alist[3])
print(alist[-1])

运行结果:

                                     

切片操作

通过下标操作是一次取出里面第一个元素.通过切片, 则是一次取出一组连续的元素, 相当于得到一

个子列表。

  • 使用 [ : ] 的方式进行切片操作
alist = [1, 2, 3, 4]
print(alist[1:3])

                           

alist[1:3] 中的 1:3 表示的是 [1, 3) 这样的由下标构成的前闭后开区间.

也就是从下标为 1 的元素开始(2), 到下标为 3 的元素结束(4), 但是不包含下标为 3 的元素.

所以最终结果只有 2, 3 

  • 切片操作中可以省略前后边界(具体规则如下)
alist = [1, 2, 3, 4]
print(alist[1:]) # 省略后边界, 表示获取到列表末尾
print(alist[:-1]) # 省略前边界, 表示从列表开头获取
print(alist[:]) # 省略两个边界, 表示获取到整个列表.

                  

  • 切片操作还可以指定 "步长" , 也就是 "每访问一个元素后, 下标自增几步"
alist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(alist[::1])
print(alist[::2])
print(alist[::3])
print(alist[::5])

  • 切片操作指定的步长还可以是负数, 从后往前进行取元素. 表示 "每访问一个元素之后, 下标自减几步"
alist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(alist[::-1])
print(alist[::-2])
print(alist[::-3])
print(alist[::-5])

  • 如果切片中填写的数字越界了, 不会有负面效果. 只会尽可能的把满足条件的元素都取到

但如果两个界限都超出了范围的话就会取不到元素,但也没有报错:

alist = [1, 2, 3, 4]
print(alist[100:200])

                                     

遍历列表元素

下面将进行讲解如何进行遍历数列元素。

for循环

下面这个方法的for循环只适合对列表中的元素进行只读状态,不能改变列表中的元素:

alist = [1, 2, 3, 4]
for elem in alist:
    print(elem)

                        

而通过下标的方法来访问可以对列表中的元素进行访问并且修改和操作:

alist = [1, 2, 3, 4]
for i in range(0, len(alist)):
    print(alist[i])

这个与上面的打印效果效果相同,接下来再举例一个进行修改元素的例子:

alist = [1, 2, 3, 4]
for i in range(0, len(alist)):
    alist[i] = 0
print(alist)

                        

while循环

alist = [1, 2, 3, 4]
i = 0
while i < len(alist):
    print(alist[i])
    i += 1

通过添加 i 的增加来控制循环。

新增元素

append

我们可以用append的方法向列表后面增添一个元素:

alist = [1, 2, 3, 4]
alist.append('hello')
print(alist)

此处的append是搭配列表对象alist来使用的,而不是作为一个独立的函数,是一种搭配对象的函数。

insert

我们可以通过insert来对列表中任意位置进行增添元素:

a  = [1, 2, 3, 4]
a.insert(1, 'hello')
a.insert(100, 'hello')
print(a)

函数的第一个形参位置填写的是要访问的位置的下标,第二个位置是要添加的元素。如果要添加的位置超出了列表的范围,它还是会尽量的进行添加,则添加到了列表的最后位置。

查找元素

用 in 查找

a = [1, 2, 3, 4]
print(1 in a)
print(10 in a)
print(1 not in a)
print(10 not in a)

可以通过in来进行查找,当in加上not时相当于对in进行逻辑取反。当用in找到元素时就会返回True,否则为False,用not in则是逻辑相反。

                                 

用 index 查找

使用 index 方法, 查找元素在列表中的下标. 返回值是一个整数. 如果元素不存在, 则会抛出异常。

alist = [1, 2, 3, 4]
print(alist.index(2))
print(alist.index(10))

删除元素
 

pop

alist = [1, 2, 3, 4]
alist.pop(2)
print(alist)

可以用pop来删除元素,如果只是alist.pop的话删除的是列表的最后一个元素,如果在( )中填写下标的话,那么pop就会通过下标来删除对应下标的元素。

remove

alist = [1, 2, 3, 4]
alist.remove(2)
print(alist)

                    

通过在remove的( )中填写要删除的元素即可达到删除对应元素的效果。

连接列表

使用 + 拼接

此处的 + 结果会生成一个新的列表. 而不会影响到旧列表的内容。

alist = [1, 2, 3, 4]
blist = [5, 6, 7]
print(alist + blist)

     

extend

使用 extend 方法, 相当于把一个列表拼接到另一个列表的后面。a.extend(b) , 是把 b 中的内容拼接到 a 的末尾. 不会修改 b, 但是会修改 a

alist = [1, 2, 3, 4]
blist = [5, 6, 7]
alist.extend(blist)
print(alist)
print(blist)

    

元组

元组和列表相比,基本是一致的。

元组用()表示(或者tuple()):

atuple = ( )
atuple = tuple()

元组与列表最大的区别就是:元组不能修改里面的元素, 列表则可以修改里面的元素

因此, 像读操作,比如访问下标, 切片, 遍历, in, index, + 等, 元组也是一样支持的,但是, 像写操作,

比如修改元素, 新增元素, 删除元素, extend 等, 元组则不能支持。

元组在 Python 中很多时候是默认的集合类型. 例如, 当一个函数返回多个值的时候:

def getPoint():
    return 10, 20

result = getPoint()
print(type(result))

可莉的总结

  • 列表和元组都是日常开发最常用到的类型. 最核心的操作就是根据 [ ] 来按下标操作.
  • 在需要表示一个 "序列" 的场景下, 就可以考虑使用列表和元组.
  • 如果元素不需要改变, 则优先考虑元组.
  • 如果元素需要改变, 则优先考虑列表.

希望大家通过和可莉一起学习这篇博客能可以你更好地理解列表和元组,并选择适当的数据类型来处理你的数据,加油~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL进阶之路】BufferPool底层设计(下)

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

购物|电商购物小程序|基于微信小程序的购物系统设计与实现(源码+数据库+文档)

电商购物小程序目录 目录 基于微信小程序的购物系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户前台功能实现 2、管理员后台功能实现 四、数据库设计 1、实体ER图 2、具体的表设计如下所示&#xff1a; 五、核心代码 六、论文参考 七、最新计算机毕设…

MySQL数据库——索引

索引是数据结构&#xff0c;用于高效获取数据的数据结构&#xff08;有序&#xff09;。 1、索引的优缺点&#xff1a; 1.1、优点&#xff1a; a、提高数据检索效率&#xff0c;降低数据库的IO成本&#xff08;提高查询效率&#xff09; b、通过索引列对数据进行排序&#…

ClickHouse--01--简介

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. ClickHouse 简介1.1 大数据处理场景1.2 什么是 ClickHouse1.3 OLAP 场景的特征 2. ClickHouse 特性2.1 完备的 DBMS 功能2.2 列式存储行式存储: 在数据写入和修改…

玉米基因miRNA结合位点预测工具

前记 目前&#xff0c;已经有很多种玉米miRNA结合位点预测工具可供选择&#xff0c;以下几种比较常用&#xff1a; 1、psRNATarget&#xff1a;该工具是由华盛顿州立大学开发的&#xff0c;可以用来预测植物miRNA和靶基因之间的相互作用。用户可以使用该工具来预测玉米miRNA和结…

【Web】vulhub Shiro-550反序列化漏洞复现学习笔记

目录 Shiro简介 复现流程 工具一把梭 半脚本半手动 原理分析 反序列化入口 常见的key 登录过程 验证过程 利用原理 Shiro简介 Apache Shiro 是一个强大且易于使用的 Java 安全框架&#xff0c;用于身份验证、授权、加密和会话管理等安全功能。Shiro 的设计目标是简单…

C++入门全集(1):初窥门径

一、前言 C是一种计算机高级程序设计语言&#xff0c;它在C语言的基础上进行了进一步的扩充和完善&#xff0c;并增加了许多有用的库&#xff0c;是一种面向对象的程序设计语言。 所以&#xff0c;C是兼容C语言语法的。 我打算把所有C入门需要学习的知识整合成一个全集&…

DNS 域名系统——应用层

目录 1 域名系统 DNS 1.1 域名系统 1.2 互联网的域名结构 1.2.1 顶级域名 TLD(Top Level Domain) (1) 国家顶级域名 nTLD (2) 通用顶级域名 gTLD (3) 基础结构域名 (infrastructure domain) 1.3 域名服务器 1.3.1 域名服务器的四种类型 &#xff08;1…

bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具

bpmn.js是由开源工作流引擎camunda内部组织BPMN.IO组织开发的一款基于BPMN 2.0的工作流展示、编辑的web端工具库。由于工作流引擎activiti、flowable、camunda属于同宗分流&#xff0c;其工作流定义格式大致相同&#xff0c;所以我们可以使用bpmn.js完美融合其中任一工作流引擎…

使用 openpyxl 操作 Excel

由于单位有任务&#xff0c;需要按照名册制作多个工作表。手动复制和修改内容太费事了&#xff0c;所以使用python完成此项工作&#xff0c;为之后的此类工作提供一个通用脚本。 安装依赖库 pip install openpyxl lxml我们需要用到openpyxl。在官方文档中提到&#xff0c;如果…

SpringCloud-微服务概述、SpringCloud入门概述、服务提供与消费

1.学习前言 1.1 学习前提 熟练使用SpringBoot 微服务快速开发框架了解过Dubbo Zookeeper 分布式基础电脑配置内存不低于8G 1.2 文章大纲 Spring Cloud 五大组件 服务注册与发现——Netflix Eureka负载均衡&#xff1a; ​ 客户端负载均衡——Netflix Ribbon ​ 服务端负载…

前端JavaScript篇之对this对象的理解

目录 对this对象的理解1. 函数调用模式&#xff1a;2. 方法调用模式&#xff1a;3. 构造器调用模式&#xff1a;4. apply、call和bind调用模式&#xff1a; 对this对象的理解 在JavaScript中&#xff0c;this关键字是一个非常重要的概念&#xff0c;它用于指向当前执行上下文中…

【从Python基础到深度学习】2. Ubuntu及插件安装

本期所有软件安装包&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1UVEYm-12FivAnrE5NUXevg?pwdum60 一、安装Ubuntu 1.1 软件安装包&#xff1a;下载 VMware Workstation Pro | CN 一直点下一步即可 1.2 双击运行软件&#xff1a; 输入密钥 1 、VMware 15密钥 …

香港倾斜模型3DTiles数据漫游

谷歌地球全香港地区倾斜摄影数据&#xff0c;通过工具转换成3DTiles格式&#xff0c;将这份数据完美加载到三维数字地球Cesium上进行完美呈现&#xff0c;打造香港地区三维倾斜数据覆盖&#xff0c;完美呈现香港城市壮美以及维多利亚港繁荣景象。再由12.5米高分辨率地形数据&am…

双指针和单调栈

双指针 用于解决一类基于子段的统计问题 子段就是&#xff1a;数组中连续的一段 可以用一个闭区间来表示数组中的连续一段 这个方法核心就是优化&#xff1a;两种循环的枚举 也就是枚举左端点l和右端点r的所有可能优化关键就是&#xff1a;去除枚举中的冗余部分 具体优化策略…

eslint报错文档大量红色报错符号 不自动修正

确保eslint在工作 控制台大量报错信息 确保setting.json 开了保存的时候自动格式化代码 这个时候保存的时候代码可以自动被格式化 但是 文档中和控制台中仍然有大量的报错 信息 此时此刻说明 格式化文档的文件不是按照eslint 格式化的 可以网上找找现成可用的setting.json抄…

【linux温故】CFS调度

写在前面 网上关于CFS 调度器的文章多如牛毛&#xff0c;没必要自己写。很多文章写的都非常好。 很多文章里&#xff0c;关键的技术点&#xff0c;都是一样的&#xff0c;只是各个文章说法不一样。 掌握了核心的&#xff0c;关键的&#xff0c;其他的&#xff0c;如果工作中…

堆排序----C语言数据结构

目录 引言 堆排序的实现**堆的向下调整算法** 对排序的时间复杂度建堆的时间复杂度&#xff1a;排序过程的时间复杂度&#xff1a;总体时间复杂度&#xff1a; 引言 堆排序&#xff08;Heap Sort&#xff09;是一种基于比较的排序算法&#xff0c;利用堆的数据结构来实现。它的…

【数据结构与算法】力扣刷题记之 稀疏数组

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

LLM应用开发与落地:流式响应

一、背景 最近智能客服产品给到一个游戏客户那边&#xff0c;客户那边的客服负责人体验后认为我们产品回答的准确率是还是比较高的。同时&#xff0c;他反馈了几个需要改进的地方&#xff0c;其中一个就是机器人回复慢。机器人回复慢有很多原因&#xff0c;也有优化方式&#…