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

news2024/11/26 22:42:15

🌈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])
# 输出 2

print(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] + 10

print(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 = 10
    y = 20
    return x ,y

x, y =getPoint()
print(type(getPoint()))

# 运行结果:
# <class 'tuple'>

元组的作用:

协同开发的时候,

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

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

函数肯定需要传参~~

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

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


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

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

下一篇让我们继续探索

什么是哈希吧!

感谢大家

支持

💖

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

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

相关文章

把一般数据转换成因子数据格式,做单因子、债券对历史数据回测+获取curl命令+垃圾数据转换成标准行情数据(bardata)

下载curl软件&#xff0c;地址&#xff1a; curl for Windows for 64-bit下载好后解压到文件夹&#xff0c;将里面的bin文件添加到环境变量中&#xff0c;bon文件地址为&#xff1a;C:\Users\59980\curl-8.2.1_7-win64-mingw\bin 打开cmd&#xff0c;输入curl --help,出现下…

软考:中级软件设计师:程序语言基础:表达式,标准分类,法律法规,程序语言特点,函数传值传址

软考&#xff1a;中级软件设计师:程序语言基础&#xff1a;表达式 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都…

ssm民宿管理系统源码和论文

ssm民宿管理系统源码和论文110 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&…

SSM整合~

构建并配置项目&#xff1a; 第一步&#xff1a;创建maven项目 第二步&#xff1a;配置pom.xml文件 设置打包方式&#xff1a; <packaging>war</packaging>设置版本号为自定义属性&#xff1a; <properties><!--将版本号通过自定义属性配置--><…

跨站请求伪造(CSRF)攻击与防御原理

跨站请求伪造&#xff08;CSRF&#xff09; 1.1 CSRF原理 1.1.1 基本概念 跨站请求伪造&#xff08;Cross Site Request Forgery&#xff0c;CSRF&#xff09;是一种攻击&#xff0c;它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程序上执行非本意操作的攻击&a…

差异化竞争阵地的所在【周技术进阶】-从BS 项目C#最基础截取字符串方法开始

效果 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleAppNumberOneHelloWorld {class Program{static void Main(string[] args){Console.WriteLine("hello world&#xf…

TCP机制之确认应答及超时重传

TCP因为其可靠传输的特性被广泛使用,这篇博客将详细介绍一下TCP协议是如何保证它的可靠性的呢?这得主要依赖于其确认应答及超时重传机制,同时三次握手四次挥手也起到了少部分不作用,但是主要还是由确认应答和超时重传来决定的;注意:这里的可靠传输并不是说100%能把数据发送给接…

JVM学习(五)--方法区

概念&#xff1a; 方法区就是存和类相关的东西&#xff0c;成员方法&#xff0c;方法参数&#xff0c;成员变量&#xff0c;构造方法&#xff0c;类加载器等&#xff0c;逻辑上存在于堆中&#xff0c;但是不同的虚拟机对它的实现不同&#xff0c;oracle的hotsport vm在1.6的时…

事务(SQL)

事务概述 事务是一组操作的集合&#xff0c;他是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向西永提交或撤销操作请求。这组操作&#xff0c;要么全部执行成功&#xff0c;要么全部执行失败。 事务操作 查看/设置事务提交方式 -- 查看/设置事务…

9.1.tensorRT高级(4)封装系列-自动驾驶案例项目self-driving-道路分割分析

目录 前言1. 道路分割总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-自动驾驶案例项目self-driving-道路分…

Linux入门之多线程|线程|进程基本概念及库函数

目录 一、线程 1.线程的概 补充知识点&#xff1a;页表 2.线程的优点 3.线程的缺点 4.线程异常 5.线程用途 二、线程与进程的区别与联系 三、关于进程线程的问题 0.posix线程库 1.创建线程 2.线程终止 3.取消线程 4.线程等待&#xff08;等待线程结束&#xff09;…

02|李沐动手学深度学习v2(笔记)

基础优化算法 导航 基础优化算法梯度下降1.1 小批量随机梯度下降1.2 小结 线性回归实现1. 处理数据1.3 生成大小为batch_size的小批量 2. 处理模型3. 模型评估4. 训练过程 梯度下降 针对我们的模型没有显示解。&#xff08;生活中很少能有完全符合的线性模型&#xff0c;大多数…

用户中心笔记-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 // 查看版…

信息系统安全运维模型 课堂记录

声明 本文是学习 信息系统安全运维管理指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 范围 本标准描述了信息系统安全运维管理体系&#xff0c;给出了安全运维策略、安全运维组织、安全运维规程和安全运维支撑系统等方面相关活动的目的、要求和…

【项目 计网9】4.25 IO多路复用简介 4.26select API介绍 4.27 select代码编写

文章目录 4.25 IO多路复用&#xff08;I/O多路转接&#xff09;简介4.26select API介绍4.27 select代码编写客户端程序select程序select的缺点 4.25 IO多路复用&#xff08;I/O多路转接&#xff09;简介 输入输出&#xff1a;以内存为主体 读写&#xff1a;以程序为主体 程序要…

2023-09-03 LeetCode每日一题(消灭怪物的最大数量)

2023-09-03每日一题 一、题目编号 1921. 消灭怪物的最大数量二、题目链接 点击跳转到题目位置 三、题目描述 你正在玩一款电子游戏&#xff0c;在游戏中你需要保护城市免受怪物侵袭。给你一个 下标从 0 开始 且长度为 n 的整数数组 dist &#xff0c;其中 dist[i] 是第 i …

从一到无穷大 #12 Planet-Scale In-Memory Time Series Database, Is it really Monarch?

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言约束优势数据模型写路径查询路径Field Hints Index可靠性 其他总结 引言 Monarc…

Thymeleaf常见属性

参考文档 thymeleaf 语法——th:text默认值、字符串连接、th:attr、th:href 传参、th:include传参、th:inline 内联、th:each循环、th:with、th:if_猎人在吃肉的博客-CSDN博客 代码演示 Controller public class TestController {AutowiredMenuService menuService;GetMapp…

基于多设计模式下的同步异步日志系统

基于多设计模式下的同步&异步日志系统 代码链接&#xff1a;https://github.com/Janonez/Log_System 1. 项目介绍 本项目主要实现一个日志系统&#xff0c; 其主要支持以下功能&#xff1a; 支持多级别日志消息支持同步日志和异步日志支持可靠写入日志到标准输出、文件…

uni-app之android原生插件开发

一 插件简介 1.1 当HBuilderX中提供的能力无法满足App功能需求&#xff0c;需要通过使用Andorid/iOS原生开发实现时&#xff0c;可使用App离线SDK开发原生插件来扩展原生能力。 1.2 插件类型有两种&#xff0c;Module模式和Component模式 Module模式&#xff1a;能力扩展&…