Python基础语法-列表与元组

news2024/10/22 3:03:37

列表与元组

在编程中,经常需要使用变量来保存数据,如果数据比较少,我们创建几个变量也就算了,那如果数据很多呢。
甚至有些时候数据多到你都不清楚到底有多少,那么就需要使用到列表了。
列表是一种让程序员再代码中批量表示/保存数据的方式。

那什么是元组呢?
元组和列表相比,非常类似。区别再于列表中放哪些元素可以修改调整,元组中放的元素是创建元组时就设定好的,不能修改调整。

这点也就说明列表是动态的而元组是静态的。其实也就相当于C语言的数组,一个是动态数组,一个是动态数组。

1.创建列表

创建列表主要有两种方式[]表示一个空列表。

alist = [] #1
alist = list()#2
print(type(alist))

#<class 'list'>

如果需要初始化,直接把你想要初始化的值放到[]中就可以了。
可以直接使用print来打印list中的元素。

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

要注意的是,列表是允许存放不同类型的数据的。这点和C++/java就很不同。

alist = [1,'hahhaaa',1.0]
print(alist)
#[1, 'hahhaaa', 1.0]

2.下标访问

可以通过下标访问操作符[]来获取列表中的任意元素。
这点就和C语言类似了,通过在[]填写下标索引来访问元素。

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

注意:下标是从0开始的,后续依次递增。
同样我们不仅可以通过下标访问列表元素,还可以通过下标来修改元素。

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

# 100

特别的是在python中,下标是可以取负值的,表示倒数第几个元素。

alist[-1] = alist[len(alist)-1]

注意:下标访问时,一定不要超出列表的有效范围,否则会抛出异常,报错的。

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

# IndexError: list index out of range

因为下标是从0开始的,因此下标的有效范围[0,列表长度-1],可以使用len函数来获取列表的长度。

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

# 4

3.切片操作

如果说通过下标操作是一次获取一个数,那么切片操作就是一次获取一个子列表。
语法:

使用[:]来进行切片

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

#[2, 3]

alist[1:3]中的13使用的是左闭右开的区间,也就是[1,3)

关于切片的特殊操作

省略边界

alist = [1,2,3,4,5]
print(alist[1:]) #省略后边界,表示获取到列表的末尾
print(alist[:-1]) #省略前边界,表示从列表开头开始获取
print(alist[:]) #省略两个边界,表示获取整个列表
'''
[2, 3, 4, 5]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
'''

指定步长

alist = [1,2,3,4,5,6,7,8,9,0]
print(alist[::1])
print(alist[::2])
print(alist[::3])
print(alist[::4])
'''
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
[1, 3, 5, 7, 9]
[1, 4, 7, 0]
[1, 5, 9]
'''

如果指定的步长为负值,则会从后往前遍历。

alist = [1,2,3,4,5,6,7,8,9,0]
print(alist[::-1])
print(alist[::-2])
print(alist[::-3])
print(alist[::-4])
'''
[0, 9, 8, 7, 6, 5, 4, 3, 2, 1]
[0, 8, 6, 4, 2]
[0, 7, 4, 1]
[0, 6, 2]
'''

注意:在切片中填写的数字越界了,不会有负面效果,编译器只会尽可能地把满足条件地元素显示。

4.遍历列表元素

遍历’指的是把元素一个一个的取出来,再分别进行处理。

最简单就是for循环咯。

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

生成下标访问。

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

如果是while循环的话。

alist = [1,2,3,4,5]
while i < len(alist):
	print(alist[i])
	i+=1
5.新增元素

使用append方法/函数,向列表末尾插入一个元素。

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

# [1, 2, 3, 4, 5, 'elem']

使用insert方法/函数,向任意位置插入一个元素。

alist = [1,2,3,4,5]
alist.insert(1,'elem') #第一次参数就是要插入的下标位置。
print(alist)

# [1, 'elem', 2, 3, 4, 5]
6.查找元素

使用in操作符,判断元素是否在列表中存在,返回值是布尔类型。

alist = [1,2,3,4]
print(2 in alist)
print(100 in alist)
'''
True
False
'''

使用index方法,查找元素再列表中的下标,返回值是一个整数,如果元素不存在会报错。

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

'''
1
ValueError: 10 is not in list
'''
7.删除元素

使用pop方法删除末尾元素,即尾删。

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

同时pop也能根据所提供的下标进行定点删除。

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

# [1, 2, 4, 5]

如果不知道下标,列表还提供了remove方法,进行删除对应元素的操作

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

#[1, 2, 3, 4, 5, 5]
8.连接列表

使用+可以使连个列表连接起来

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

# [1, 2, 3, 4, 5, 6, 7]

此处的+是会生成一个新的列表来存储,不会影响到就列表。

使用extend方法,相当于把一个列表拼接到另一个列表的后面。

a.extend(b)是吧b的内容拼接到a的末尾,会改变a,但不会改变b

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

'''
[1, 2, 3, 4, 5, 6, 7]
[4, 5, 6, 7]
'''
9.关于元组

元组的功能和列表相比,基本一致的。
元组使用()来表示

atuple = ()
atuple = tuple()

元组不能修改里面的元素,列表则可以修改里面的元素。
因此像一些读操作,比如访问下标,切片,遍历,in,index +元组一样支持的。
但是像写操作 修改元素 新增元素 删除元素 extend元组 都是不支持的。
另外再python中很多时候默认的集合类型就是元组。

def test():
	return 1,2
print(type(test()))

#<class 'tuple'>

为什么python即有列表又有元组呢?
元组的优势:

  • 你有一个列表, 现在需要调用一个函数进行一些处理. 但是你有不是特别确认这个函数是否会把你的列表数据弄乱. 那么这时候传一个元组就安全很多.
  • 字典, 是一个键值对结构. 要求字典的键必须是 “可hash对象” (字典本质上也是一个hash表). 而一个可hash对象的前提就是不可变. 因此元组可以作为字典的键, 但是列表不行

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

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

相关文章

IO编程——消息队列

题目&#xff1a; 代码实现&#xff1a; #include <myhead.h> //正文大小 #define MSGSZ (sizeof(struct msgbuf)-sizeof(long)) //定义要发送的消息类型 struct msgbuf{long msgtype; //消息类型char mtext[1024]; //消息正文 };int main(int argc, const char *ar…

全面升级:亚马逊测评环境方案的最新趋势与实践

在亚马逊测评领域深耕多年&#xff0c;见证了无数环境方案的更迭与演变&#xff0c;每一次变化都体现了国人不畏艰难、勇于创新的精神。面对平台的政策调整&#xff0c;总能找到相应的对策。那么&#xff0c;当前是否存在一套相对稳定且高效的技术方案呢&#xff1f;答案是肯定…

【计网】从零开始理解TCP协议 --- 拥塞控制机制,延迟应答机制,捎带应答,面向字节流

时间就是性命。 无端的空耗别人的时间&#xff0c; 其实是无异于谋财害命的。 --- 鲁迅 --- 从零开始理解TCP协议 1 拥塞控制2 延迟应答3 捎带应答4 面向字节流5 TCP异常情况TCP小结 1 拥塞控制 尽管TCP拥有滑动窗口这一高效的数据传输机制&#xff0c;能够确保在对方接收…

基于卷积神经网络的蔬菜识别系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 基于卷积神经网络的蔬菜识别系统&#xff0c;resnet50&#xff0c;mobilenet【pytorch框架&#xff0c;python&#xff0c;tkinter】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神…

关于vue3中如何实现多个v-model的自定义组件

实现自定义组件<User v-model"userInfo" v-model:gender"gender"></User> User组件中更改数据可以同步更改父组件中的数据&#xff1a; 1 父组件&#xff1a; <User v-model"userInfo" v-model:gender"gender">&…

ROUGE:摘要自动评估软件包

算法解析 ROUGE&#xff08;Recall-Oriented Understudy for Gisting Evaluation&#xff09;是一组用于自动评估文本摘要质量的指标&#xff0c;主要通过比较机器生成的摘要与一个或多个参考摘要之间的重合程度来衡量。ROUGE 包括多个变体&#xff0c;其中最常用的有 ROUGE-N…

基于Java微信小程序的的儿童阅读系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

WebGoat SQL Injection (intro) 源码分析

首先了解 java 中 mysql 的连接&#xff1a;java连接Mysql WebGoat SQL Injection (intro) 10 根据提示&#xff1a;下面两个输入框只有一个受到 sql 注入攻击。题目要求是检索到所有数据 发现请求路径为 SqlInjection/assignment5b 定位到所在文件如下&#xff0c;根据代码…

基于递推式最小二乘法的PMSM参数辨识MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 最小二乘法是一种回归估计法&#xff0c;适用于被辨识的参数与系统输出为线性关 系的情况。它是在一定数据量下&#xff0c;基于系统输出误差的平方和最小的准则对参 数进行辨识的方法。此模型通过…

使用Flask实现本机的模型部署

前言 模型部署是指将大模型运行在专属的计算资源上&#xff0c;使模型在独立的运行环境中高效、可靠地运行&#xff0c;并为业务应用提供推理服务。其目标是将机器学习模型应用于实际业务中&#xff0c;使最终用户或系统能够利用模型的输出&#xff0c;从而发挥其作用。 一、设…

unity 屏幕波动反馈打击效果(附资源下载)

unity 屏幕波动反馈打击效果 一枪打出去整个屏幕都回波动的效果反馈。 知识点&#xff1a; 1、动画事件 2、屏幕后处理 效果如图&#xff1a;&#xff08;波动速度浮动都可调整&#xff09; 附件下载

TH-OCR:高效的文字识别工具与护照阅读器的完美结合

在数字化的时代&#xff0c;高效准确的文字识别工具变得越来越重要。今天我要给大家介绍一下 TH-OCR。 TH-OCR 是一款功能强大的文字识别软件&#xff0c;它能够快速准确地识别各种文档中的文字&#xff0c;大大提高了工作效率。 而其中&#xff0c;TH-OCR 在护照阅读器方面的应…

Gitlab 完全卸载–亲测可行

1、停止gitlab gitlab-ctl stop2.卸载gitlab&#xff08;注意这里写的是gitlab-ce&#xff09; rpm -e gitlab-ce 3、查看gitlab进程 ps aux | grep gitlab 4、杀掉第一个进程&#xff08;就是带有好多.............的进程&#xff09; 5、删除所有包含gitlab文件 find / …

工业自动化为什么依赖光耦隔离器 --- 腾恩科技

光耦合器隔离器在工业自动化中必不可少&#xff0c;可确保信号传输&#xff0c;同时保护敏感电子设备和人员免受高压影响。选择合适的光耦合器隔离器取决于对操作环境和隔离要求的了解。本文将重点介绍在为工业应用选择光耦合器隔离器时需要考虑的关键因素。 光耦合器隔离器在工…

电影评论网站开发:Spring Boot技术指南

3系统分析 3.1可行性分析 通过对本电影评论网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本电影评论网站采用SSM框架&#xff0c;JAVA作为开发语言&#…

python获取当前鼠标位置的RGB值

效果 依赖 pip install Pillow pyautoguisudo apt install gnome-screenshot代码 import pyautogui import timedef get_rgb_at_mouse():try:while True:# 获取当前鼠标的位置x, y pyautogui.position()# 截取当前屏幕图像screenshot pyautogui.screenshot()# 获取鼠标位置…

【C语言备课课件】(下)指针pointer

目录 定义type *var_name;初始化int *p &a; // p指向变量a的地址 空指针NULL,野指针&#xff0c;指针悬挂 解引用指针的算术运算指针与数组 数组名—首指针二维数组指针 行指针列指针 多级指针&#xff08;进阶&#xff09;数组指针,指针数组&#xff08;进阶&#xff09…

ZYNQ:流水灯实验

实验目的 PL_LED0 和 PL_LED1 连接到 ZYNQ 的 PL 端&#xff0c;PL_LED0 和 PL_LED1循环往复产生流水灯的效果&#xff0c;流水间隔时间为 0.5s。 原理图 程序设计 本次实验是需要实现两个LED的循环熄灭点亮&#xff0c;时间间隔是0.5S,对时间间隔的控制使用计数器来完成。本…

改变函数调用上下文:apply与call方法详解及实例

目录 改变函数调用上下文&#xff1a;apply与call方法详解及实例 一、什么是 apply 方法&#xff1f; 1、apply 语法 2、apply 示例 二、什么是 call 方法&#xff1f; 1、call 语法 2、call 示例 三、apply 和 call 的共同与差异 1、apply 和 call 的共同点 2、apply…

一文读懂什么是数据即产品(Data as a Product,DaaP)

企业每天都要产生并消费大量数据&#xff0c;但如果这些数据一直保持在原始格式&#xff0c;就很难真正应用起来。因此&#xff0c;为了充分发挥数据的最大潜力&#xff0c;必须改变组织内部处理数据的方式。 “数据即产品”&#xff08;DaaP&#xff09;就是这样一种思维方式…