PYTHON知识点学习-列表和元组

🌈write in front🌈
🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流.
🆔本文由 Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️
📝个人主页:Aileen_0v0🧸—CSDN博客
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏:Aileen_0v0🧸的PYTHON学习系列专栏——CSDN博客
🗼我的格言:"没有罗马,那就自己创造罗马~" 

6a78491801a74bbd8d932659b06e11db.gif#pic_center

列表和元组的作用及区别

变量:就是内存空间,用来表示/存储数据~

如果表示的数据少~ ~直接定义几个变量就行了~~

num1

num2

num3

.........

但是,有时候我们要表示的数据就比较多~ ~

 Python中,列表和元组,就是这样的机制,可以用一个变量表示多个数据~ ~

 Python中的列表和元组 就类似于其他编程语言 中的"数组"

9a095ff2a5b740dfb3b0f76402920df7.jpeg

让我们用美味的辣条表示我们的数剧            装辣条的袋子表示: 列表/元组~

列表和元组,大部分功能差不多! 但是有一个功能有非常明显的区别:

列表:   可变   创建好之后,  随时能改--->相当于散装辣条  想来几根就几根,很容易,可以随时改

元组:   不可变  创建好之后, 改不了.要想改,只能丢弃旧的,搞过新的~ --->相当于包装辣条  想再多来几根, 不容易 ,但是可以换一个大包的~

e15123003cdc4a2582a341cb418eab02.png

列表

2.1创建列表

#1.直接使用字面值来创建
# [] 就表示一个空的列表
a = []
print(type(a))#2. 使用 list() 来创建
b = list()
print(type(b))#3. 可以在创建列表的时候, 在[]中指定列表的初始值.
#   元素之间使用 , 来分割
a = [1,2,3,4]
print(a)#4. 可以在同一个列表里放不同类型的变量
a = [1,"hello",True,[4,5,6]]
print(a)

2.2访问列表

C++/Java 里面要求一个数组只能存相同类型的变量~ ~

Python 里的 列表 则无限制, 放啥类型都可以!!


#5.使用下标来访问列表元素
a = [1,2,3,4]
#    0 1 2 3            python中的下标,是从0开始计数的!!
print(a[2])# 6.使用下标来修改元素
a =[1,2,3,4]
a[2]=100
print(a)

由于下标是从0开始计算的

对于列表来说,下标的有效范围是,从 0 到 长度-1

当我们下标超出有效范围时,尝试访问,就会出现异常!!2af5cb73e13c491895f83461d0e4bb42.png

#8.可以使用内建函数 len 来获取到列表的长度(元素个数),和字符串类似
a =[1,2,3,4]
print(len(a))

len 可以传字符串,列表,元组,字典,自定义的类...... =>动态类型~

#9.python 中的下标, 还可以写成负数!!
# 例如 写成-1, 其实等价于 len(a)-1
a=[1,2,3,4]
print(a[len(a) - 1])
# -1 就是倒数第一个元素!
print(a[-1])
#10. 可以通过索引的方式访问列表里面列表的元素。
#例如,我们有一个列表nested_list,其中包含两个列表[1, 2, 3]和[4, 5, 6],
#则可以通过以下方式访问它们的元素:
nested_list = [[1, 2, 3], [4, 5, 6]]
print(nested_list[0][1])
# 输出 2print(nested_list[1][2])
# 输出 6#在上面的例子中,[0]表示访问第一个列表,然后在该列表中再次使用索引[1]访问第二个元素。
#同样的方式,我们也可以访问第二个列表的第三个元素,即nested_list[1][2]。

2.3列表的切片操作

通过下标操作 一次取出里面的一个元素.

通过切片, 则是一次取出一组连续的元素, 相当于得到一个 子列表

使用 [ : ] 的方式进行切片操作

切片操作中,[ ]里面有两个数字,表示了一段区间.

# 1. 切片操作的基本使用
a = [1,2,3,4]
print(a[1:3])

1 表示开始区间的下标

3 表示结束区间的下标

1:3-------->取到下标 为1 一直到 下标为 3 的元素!

(包含 1,不包含 3)-->[1,3)

切片操作是一个比较高效的操作,进行切片的时候,只取出了原有列表的一部分,并不涉及到"数据的拷贝",假设有一个很大的列表,进行切片,切片的范围也很大,即使如此,切片操作仍然非常高效

# 2. 使用切片的时候,省略边界.
a = [1,2,3,4]
#省略后边界, 意思是从开始位置,一直取到整个列表结束.
print(a[1:])
#省略前边界, 意思是从列表的 0 号元素开始取, 一直取到结束的后边界
print(a[:2])
#此处切片中的下标也可以写成负数.
print(a[:-1])
#还可以把开始边界和结束边界,都省略掉! 得到的还是列表自身.
print(a[:])#--------------------------
#运行结果:
#[2, 3, 4]
#[1, 2]
#[1, 2, 3]
#[1, 2, 3, 4]

切片操作,还可以指定"步长". range

#3.带有步长的切片操作.
a=[1,2,3,4,5,6,7,8,9,0]
print(a[::1])
print(a[::2])
print(a[::3])
print(a[1:-1:2])#运行结果:
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
#[1, 3, 5, 7, 9]
#[1, 4, 7, 0]
#[2, 4, 6, 8]
#4.步长数值还可以是负数.当步长为负数时,意思是从后面往前来取元素.
print(a[::-1])
print(a[::-2])#运行结果:
#[0, 9, 8, 7, 6, 5, 4, 3, 2, 1]
# [0, 8, 6, 4, 2]
#5.当切片中的范围超出有效下标之后,不会出现异常! 而是尽可能把符合要求的元素获取到
a = [1,2,3,4,5,6,7,8,9,0]
print(a[1:100])#运行结果:
# [2, 3, 4, 5, 6, 7, 8, 9, 0]

但是如果是下标索引,超出索引范围,就会发生越界异常

2.4列表的遍历操作

遍历:把列表里的每个元素,都依次取出来,并进行某种操作~[搭配循环使用]

#1.利用for循环来遍历列表
a = [1,2,3,4,5]
for elem in a:print(elem)#运行结果:
# 1    
# 2
# 3
# 4
# 5

#2.使用 for 循环遍历,通过下标的方式.
a=[1,2,3,4,5]
for i in range(0,len(a)):print(a[i])#运行结果:
# 1
# 2
# 3
# 4
# 5
#1.使用for 循环来遍历列表
a = [1,2,3,4,5]
for elem in a:elem = elem + 10
print(a)#运行结果:
#[1, 2, 3, 4, 5]------------>列表元素值并未改变#2.使用 for 循环遍历,通过下标的方式.
a=[1,2,3,4,5]
for i in range(0,len(a)):a[i] = a[i] + 10print(a)#运行结果:
#[11, 12, 13, 14, 15]------------>列表元素值在原来的基础上加 10

通过对比两种打印列表元素的结果可得出结论:

单纯for循环取a的每一个元素   通过for循环+下标访问
不能够修改列表本身的值修改列表本身的值
#3.使用 while 循环, 通过下标遍历.
a=[1,2,3,4,5]
i = 0
while i < len(a):print(a[i])i += 1

2.5列表的插入操作

#1. 使用 append 往列表末位新增一个元素.
a=[1,2,3,4]
a.append(5)
a.append("hello")
print(a)b = [5,6,7,8]
b.append("world")
print(b)
#运行结果:
# [1, 2, 3, 4, 5, 'hello']
#[5, 6, 7, 8, 'world']

注意:此处的 append搭配列表对象a,来一起使用的,而不是作为一个独立的函数

这种要搭配对象来使用的函数(function),也叫做"方法"(method)

在python 中,对象,就可以视为是"变量"

type,print,input,len,自定义函数...... 都是独立的函数~

#2. 还可以使用 insert 方法,往列表里的任意位置来新增元素~
a = [1,2,3,4]
a.insert(1,"hello")
a.insert(100,"hello")
#(元素插入位置的下标,插入的元素)
print(a)#运行结果:
#[1, 'hello', 2, 3, 4, 'hello']

2.6列表的查找和删除

#1. 使用 in 来判定某个元素是否在列表存在
a = [1,2,3,4]
print(1 in a)
print(10 in a)
print(1 not in a)
print(10 not in a)#运行结果:
# True
# False
# False
# True#2. 使用 index 方法, 来判断,当元素在列表中的位置, 得到一个 下标
a=[1,2,3,4]
print(a.index(2))
print(a.index(3))
print(a.index(10))#运行结果:
# 1
# 2
# ValueError: 10 is not in list
#1. 使用 pop 删除列表中最末尾的元素.
a = [1,2,3,4]
a.pop()
print(a)
#运行结果:
# [1, 2, 3]#2. 使用 pop 还能删除任意位置的元素, pop 的参数可以传一个下标过去
a = [1,2,3,4]
a.pop(1)
print(a)
#运行结果:
# [1, 3, 4]#3. 使用 remove 方法, 可以按照值来进行删除.
a = ["aa","bb","cc","dd"]
a.remove("cc")
print(a)
#运行结果:
# ['aa', 'bb', 'dd']

2.7列表的拼接

# 1. 使用 + 针对两个列表进行拼接.
a = [1,2,3,4]
b = [5,6,7,8]
c = b + a
print(c)
print(a)
print(b)#运行结果:
# [5, 6, 7, 8, 1, 2, 3, 4]
# [1, 2, 3, 4]
# [5, 6, 7, 8]

使用 + 拼接列表的时候,只是针对当前列表的内容生成了一个更大的新的列表

原有的列表内容是不变的!

#2. 使用 extend 来进行拼接.
#   这个拼接是❗直接❗把最后一个列表里的内容拼接到前一个列表里头~
a = [1,2,3,4]
b = [5,6,7,8]
a.extend(b)
print(a)
print(b)
#运行结果:
# [1, 2, 3, 4, 5, 6, 7, 8]
# [5, 6, 7, 8]

# 3. 使用 += 来进行拼接
a = [1,2,3,4]
b = [5,6,7,8]
a += b
print(a)
print(b)
#运行结果:
# [1, 2, 3, 4, 5, 6, 7, 8]
# [5, 6, 7, 8]

a += b 等价于 a = a + b      运行过程如下👇


 

a.extend(b) 则是直接把 b 的内容拼到了 a 的后面~

它们两个的过程是不一样的

a += b 等价于 a = a + b 

多了三部操作:

1.多了构造新的大列表的操作

2.多了把大列表的值赋值给a的操作

3.多了把a的旧值释放的操作'

元组的操作

#1.创建元组
a = ()
print(type(a))
b = tuple()
print(type(b))
#2.创建元组时,指定初始值.
a = (1,2,3,4)
print(a)
# 运行结果:
# (1, 2, 3, 4)
#3. 元组中的元素也可以是任意类型的.
a = (1,2,"hello",True,[])
print(a)# 运行结果:
# (1, 2, 'hello', True, [])
#4. 通过下标来访问元组中的元素,下标也是从 0 开始,到 len - 1结束.
a = (1,2,3,4)
print(a[1])
print(a[-1])
print(a[100])# 运行结果:
# 2
# 4
# tuple index out of range
#5. 通过切片来获取元组中的一个部分
a = (1,2,3,4)
print(a[1:3])#6. 也同样可以使用 for 循环等方式来进行遍历元素
a = (1,2,3,4)
for elem in a:print(elem)# 运行结果:
# (2, 3)
# 
# 1
# 2
# 3
# 4
# 7. 可以使用 in 来判定元素是否存在, 使用 index 查找元素的下标.
a =(1,2,3,4)
print(3 in a)
print(a.index(3))# 8. 可以使用 + 来拼接两个元组
a = (1,2,3)
b = (4,5,6)
print(a + b)# 运行结果:
# True
# 2
# (1, 2, 3, 4, 5, 6)
#9. 元组只是支持 "读"操作, 不能支持 "修改" 类操作.
a = (1,2,3,4)# a[0] = 100
# 运行结果:
# TypeError: 'tuple' object does not support item assignment# a.append(5)
# 运行结果:                                  属性
# AttributeError: 'tuple' object has no attribute 'append'# a.extend()
# 运行结果:   
# AttributeError: 'tuple' object has no attribute 'extend'
#10. 当进行多元赋值时,其本质是按照元组的方式来进行工作的~~
def getPoint():x = 10y = 20return x ,yx, y =getPoint()
print(type(getPoint()))# 运行结果:
# <class 'tuple'>

元组的作用:

协同开发的时候,

一个程序员A实现一些功能,提供给 程序员B来使用~~

A写好一些函数,让B去调用~

函数肯定需要传参~~

B 在传参的时候可能会纠结一个问题:B把参数传过去了,A函数会不会把B的参数内容改变了?

如果使用元组作为参数,就可以避免这样的纠结~~


元组不能修改=>不可变对象~~

不可变对象,是可以哈希的!

下一篇让我们继续探索

什么是哈希吧!

感谢大家

支持

💖

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

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

相关文章

科目1基础知识快速入门精简

科目1-4 科目一&#xff0c;又称科目一理论考试、驾驶员理论考试。》学习道路交通安全法律、法规和相关知识学习 考试内容包括驾车理论基础、道路安全法律法规、地方性法规等相关知识&#xff0c;再加地方性法规。考试形式为上机考试&#xff0c;100道题&#xff0c;90分及以…

Python安装

windows安装Python python官网 python官网下载 打开下载链接选择需要下载的python版本。 点击版本号或者Download按钮进入下载页面&#xff0c;滚动到页面最下面可看到各个平台的 Python 安装包。 选择Operating System项为Windows的文件&#xff0c;这里我们选择windows64位…

用户中心笔记-leovany

1. 安装 官方地址&#xff1a;https://pro.ant.design/zh-CN/docs/getting-started 1.1 Mac系统 1.1.1 安装yarn 安装yarn brew install yarn查看版本 brew -v 1.1.2 安装node // 安装node brew install node // 关联 brew unlink node && brew link node // 查看版…

【开发语言】C语言与Python的互操作详解

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

在 Python 中构建卷积神经网络; 从 0 到 9 的手绘数字的灰度图像预测数字

一、说明 为了预测从0到9的数字&#xff0c;我选择了一个基于著名的Kaggle的MNIST数据集的数据集。数据集包含从 <0> 到 <9> 的手绘图数字的灰度图像。在本文中&#xff0c;我将根据像素数据&#xff08;即数值数据&#xff09;和卷积神经网络预测数字。 二、 卷积…

不可变集合、Lambda表达式、Stream流

不可变集合、Lambda表达式、Stream流 创建不可变集合 不能被修改的集合 应用场景 如果某个数据不能被修改&#xff0c;把它防御性的拷贝到不可变集合中是个很好的实践。 当集合对象被不可信的库调用时&#xff0c;不可变形式是安全的。 创建不可变集合 在List、Set、Map接口中…

leetcode 189. 轮转数组

2023.9.3 k的取值范围为0~100000&#xff0c;此时需要考虑到两种情况&#xff0c;当k为0时&#xff0c;此时数组不需要轮转&#xff0c;因此直接return返回&#xff1b;当k大于等于数组nums的大小时&#xff0c;数组将会转为原来的数组&#xff0c;然后再接着轮转&#xff0c;此…

2.神经网络的实现

创建神经网络类 import numpy # scipy.special包含S函数expit(x) import scipy.special # 打包模块 import pickle# 激活函数 def activation_func(x):return scipy.special.expit(x)# 用于创建、 训练和查询3层神经网络 class neuralNetwork:# 初始化神经网络def __init__(se…

租服务器训练深度学习模型

一、选择租哪个 推荐用AutoDL(便宜、功能强大、gug少、有时时客服解决问题) AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL 二、注册、登录 学生可以认证&#xff0c;享受会员价 服务器需要登录后先充值&#xff0c;先充个10元&#xff0c;接下来试试看。每次都是开机…

Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明

Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明 目录 Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明 一、简单介绍 二、安装文件相关说明 三、界面的简单说明 四、prompt 的一些语法简单说明 1、Prompt &#xff1a;正向提示词 &am…

docker常见面试问题详解

在面试的时候&#xff0c;面试官常常会问一些问题&#xff1a; docker是什么&#xff0c;能做什么&#xff1f;docker和虚拟机的区别是什么呢&#xff1f;docker是用什么做隔离的&#xff1f;docke的网络类型&#xff1f;docker数据之间是如何通信的&#xff1f;docker的数据保…

论文解读 | OmniObject3D:用于逼真感知、重建和生成的大词汇量3D对象数据集

原创 | 文 BFT机器人 这篇论文的主要目标是介绍和探索OmniObject3D数据集&#xff0c;该数据集包含大量真实扫描的3D物体&#xff0c;涵盖了190个类别&#xff0c;提供了多种丰富的注释&#xff0c;包括纹理3D网格、采样点云、多视图图像等。作者将OmniObject3D应用于多个3D视…

Axure RP暗黑色高保真中后台原型组件模板库及组件库素材

Axure RP暗黑色高保真中后台原型组件模板库及组件库素材&#xff0c;黑色一直以来就可以给人以高级、神秘的语义象征&#xff0c;相比于浅色模式&#xff0c;暗色模式藏着更多可能性。色彩具有层级关系&#xff0c;深色会在视觉感官上自动后退&#xff0c;浅色部分则会向前延展…

springboot:时间格式化的5种方法(解决后端传给前端的时间格式转换问题)推荐使用第4和第5种!

本文转载自&#xff1a;springboot&#xff1a;时间格式化的5种方法&#xff08;解决后端传给前端的时间显示不一致&#xff09;_为什么前端格式化日期了后端还要格式化_洛泞的博客-CSDN博客 时间问题演示 为了方便演示&#xff0c;我写了一个简单 Spring Boot 项目&#xff…

SQL sever中表管理

目录 一、创建表&#xff1a; 1.1语法格式&#xff1a; 1.2示例&#xff1a; 二、修改表&#xff1a; 2.1语法格式&#xff1a; 2.2示例&#xff1a; 三、删除表&#xff1a; 3.1语法格式&#xff1a; 3.2示例&#xff1a; 四、查询表&#xff1a; 4.1语法格式&…

PostgreSQL分区表

什么是分区表 数据库分区表将表数据分成更小的物理分片&#xff0c;以此提高性能、可用性、易管理性。分区表是关系型数据库中比较常见的对大表的优化方式&#xff0c;数据库管理系统一般都提供了分区管理&#xff0c;而业务可以直接访问分区表而不需要调整业务架构&#xff0c…

轻量、便捷、高效—经纬恒润AETP助力车载以太网测试

随着自动驾驶技术和智能座舱的不断发展&#xff0c;高宽带、高速率的数据通信对主干网提出了稳定、高效的传输要求&#xff0c;CAN(FD)、LIN已无法充分满足汽车的通信需求。车载以太网作为一种快速且扩展性好的网络技术&#xff0c;已经逐步成为了汽车主干网的首选。 此外&…

【Linux】JumpServer 堡垒机远程访问

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机&#xff0c;是符合 4A 规范的专业运维安全审计系统。JumpS…

ISO/IEC/ITU标准如何快速查找(三十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

C语言每日一练--Day(17)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;数对 截取字符串 &#x1f493;博主csdn个人主页&#xff1a;小小unico…