Python入门【序列、列表简介、列表的创建 、列表元素的增加、列表元素的删除 】(四)-全面详解(学习总结---从入门到深化)

news2024/11/24 16:12:25

 

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白
📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人

🔥🔥🔥 python入门到实战专栏:从入门到实战
🔥🔥🔥 Python爬虫开发专栏:从入门到实战
🔥🔥🔥 Python办公自动化专栏:从入门到实战
🔥🔥🔥 Python数据分析专栏:从入门到实战
🔥🔥🔥 Python前后端开发专栏:从入门到实战

          序列

序列的本质和内存结构 

 列表简介

列表的创建 

list()创建

 列表元素的增加

extend()方法

 insert()插入元素

乘法扩展

列表元素的删除 

del 删除 

pop()方法 

实时效果反馈


序列

序列的本质和内存结构 

序列是一种数据存储方式,用来存储一系列的数据。在内存中,序列就是一块用来存放多个值的连续的内存空间。比如一个整数序列 [10,20,30,40],示意表示:

由于Python3中一切皆对象,在内存中实际是按照如下方式存储的: 

 

从图示中,我们可以看出序列中存储的是整数对象的地址,而不是 整数对象的值。 

 列表简介

1、列表:用于存储任意数目、任意类型的数据集合。

2、列表是内置可变序列,是包含多个元素的有序连续的内存空间。

列表的标准语法格式: a = [10,20,30,40] 其中,10,20,30,40这些称为:列表a的元素。

3、列表中的元素可以各不相同,可以是任意类型。比如: a = [10,20,'abc',True]

4、Python的列表大小可变,根据需要随时增加或缩小。

列表对象的常用方法汇总如下,方便大家学习和查阅。

 字符串和列表都是序列类型,一个字符串是一个字符序列,一 个列表是任何元素的序列。我们前面学习的很多字符串的方 法,在列表中也有类似的用法,几乎一模一样。

实时效果反馈 

1. python中,关于序列说法错误的是:

A 字符串和列表都是序列类型

B 列表中的元素可以各不相同,但类型必须一致

C 列表:用于存储任意数目、任意类型的数据集合

D 内存中,序列就是一块用来存放多个值的连续的内存空间

列表的创建 

基本语法 [] 创建

a = [10,20,'gaoqi','sxt']
b = []   #创建一个空的列表对象
print(a)

list()创建

使用list()可以将任何可迭代的数据转化成列表。

a = list() #创建一个空的列表对象
b = list(range(10))   #结果:[0, 1, 2, 3, 4,5, 6, 7, 8, 9]
c = list("gaoqi,sxt") #结果:['g', 'a', 'o','q', 'i', ',', 's', 'x', 't']

range()创建整数列表

range()可以帮助我们非常方便的创建整数列表,这在开发中及其有用。

语法格式为:range([start,] end [,step])

start参数:可选,表示起始数字。默认是0

end参数:必选,表示结尾数字。

step参数:可选,表示步长,默认为1 

⚠️python3中range()返回的是一个range对象,而不是列表。 我们需要通过list()方法将其转换成列表对象。 

典型示例如下:

a = list(range(3,15,2)) #结果:[3, 5, 7, 9,11, 13]
b = list(range(15,9,-1)) #结果:[15, 14, 13,12, 11, 10]
c = list(range(3,-4,-1)) #结果:[3, 2, 1, 0,-1, -2, -3]
print(a,b,c)

 推导式生成列表(简介一下,重点在for循环后讲)

使用列表推导式可以非常方便的创建列表,在开发中经常使用。

⚠️但是,由于涉及到for循环和if语句。在此,仅做基本介绍。 在我们控制语句后面,会详细讲解更多列表推导式的细节。

#循环创建多个元素 [0, 2, 4, 6, 8]
a = [x*2 for x in range(5)]
#通过if过滤元素[0, 18, 36, 54, 72, 90, 108,126, 144, 162, 180, 198]
b = [x*2 for x in range(100) if x%9==0]
print(a,b)

 实时效果反馈

1. 要创建列表[10,20,30,40,50,60,70,80,90],如下代码错误的是:

A a = [10,20,30,40,50,60,70,80,90]

B b = [x*10 for x in range(1,10)]

C c = [x*10 for x in range(10) if x>0]

D d = list(range(10)*10)

 列表元素的增加

当列表增加和删除元素时,列表会自动进行内存管理,大大减 少了程序员的负担。但这个特点涉及列表元素的大量移动,效 率较低。

⚠️除非必要,我们一般只在列表的尾部添加元素或删除元素, 这会大大提高列表的操作效率。 

append()方法 

原地修改列表对象,是真正的列表尾部添加新的元素,速度最快, 推荐使用。

a = [20,40]

a.append(80)

print(a)       #结果:[20, 40, 80] 

+运算符操作 

并不是真正的尾部添加元素,而是创建新的列表对象;将原列表的元素和新列表的元素依次复制到新的列表对象中。这样,会涉及大量的复制操作,对于操作大量元素不建议使用。

a = [20,40]
print(id(a))
a = a+[50]
print(id(a)) #两次地址不一样,创建了新的对象

通过如上测试,我们发现变量a的地址发生了变化。也就是创建了新的列表对象。

extend()方法

将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象。

a = [20,40]
print(id(a))
b = [50,60]
a.extend(b)     #原对象修改
print(id(a))
a = a+b         #产生新对象
print(id(a))

 insert()插入元素

使用 insert() 方法可以将指定的元素插入到列表对象的任意制定位置。 这样会让插入位置后面所有的元素进行移动,会影响处理速度。涉 及大量元素时,尽量避免使用。类似发生这种移动的函数还有: remove() 、 pop() 、 del() ,它们在删除非尾部元素时也会发生操作位置 后面元素的移动。

a = [10,20,30]
a.insert(2,100)
print(a)   #结果:[10, 20, 100, 30]

乘法扩展

使用乘法扩展列表,生成一个新列表,新列表元素是原列表元素的多次重复。

a = ['wxs',100]
b = a*3
print(a) #结果:['wxs', 100]
print(b) #结果:['wxs', 100, 'wxs', 100,'wxs', 100]

 适用于乘法操作的,还有:字符串、元组。例如:

c = 'wxs'
d = c*3     #结果:'wxswxswxs'

实时效果反馈

1. 在列表[10,20,30]后添加元素40,如下代码,正确并且速度最快的是:

A [10,20,30]+[40]

B [10,20,30]*40

C [10,20,30].append(40)

D [10,20,30].insert(2,40)

列表元素的删除 

del 删除 

删除列表指定位置的元素。

a = [100,200,888,300,400]
del a[2]
print(a)   #结果:[100,200,300,400]

pop()方法 

pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素。

a = [10,20,30,40,50]
b1 = a.pop()   #结果:b1=50
print(a,b1) #结果:[10, 20, 30, 40] 50
b2 = a.pop(1)
print(a,b2) #结果:[10, 30, 40],20

 remove()方法

删除首次出现的指定元素,若不存在该元素抛出异常。

a = [10,20,30,40,50,20,30,20,30]
a.remove(20)   #[10, 30, 40, 50, 20, 30, 20,30]
a.remove(100) #报错:ValueError:list.remove(x): x not in list

实时效果反馈

1. 删除 a = [10,20,30,40,50] 最后一个元素50,如下代码错误的是:

A a.pop()

B a.remove(50)

C del a[50]

D a.pop(4)

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

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

相关文章

微服务架构初探

大家好,我是易安!我们今天来谈一谈微服务架构的前世今生。 我们先来看看维基百科是如何定义微服务的。微服务的概念最早是在2014年由Martin Fowler和James Lewis共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的…

chatgpt赋能Python-pythonfalse

PythonFalse: Python中的False值 在Python编程语言中,布尔(Boolean)是一种基本数据类型,它只有两个值:True和False。这篇文章将讨论Python中的False值,并提供有关如何使用它的指南。 什么是PythonFalse PythonFalse…

chatgpt赋能Python-pythongil

Python GIL(全局解释器锁)介绍 Python GIL 是全局解释器锁(Global Interpreter Lock)的简称,它是 Python 解释器中的一个重要概念。GIL 的作用是确保任何时间只有一个线程在执行 Python 指令,以防止多个线…

jsonmodels.model.base

欢迎来到猫子酱的学习之旅 jsonmodels.model创建模型用法验证 validate()验证器 Validators自定义验证器(**)默认值转换为Python结构(和JSON)为您的模型创建JSON模式(***) (结合Draft7Validator)结构和对象…

蓝桥杯单片机串口通信学习提升笔记

今日得以继续蓝桥杯国赛备赛之旅: 有道是 “不知何事萦怀抱,醒也无聊,醉也无聊,梦也何曾到谢桥。” 那我们该如何 让这位诗人纳兰 “再听乐府曲 ,畅解相思苦”呢? 那就建立起串口通信吧! 我…

论文阅读_音频表示_W2V-BERT

信息 number headings: auto, first-level 2, max 4, _.1.1 name_en: w2v-BERT: Combining Contrastive Learning and Masked Language Modeling for Self-Supervised Speech Pre-Training name_ch: W2V-BERT:结合对比学习和Mask语言建模进行自监督语音预训练 pape…

Redis实现全局唯一Id

Redis实现全局唯一Id 全局唯一Id简介二、Redis实现全局唯一Id实践2.1添加RedisIdWorker配置类2.2测试类 全局唯一Id简介 系统当中有些场景如果使用数据库自增ID就存在一些问题: id的规律性太明显受单表数据量的限制 场景分析:如果我们的id具有太明显的…

基于UDP和TCP套接字实现简单的回显客户端服务器程序

目录 1. 套接字 2. 基于UDP 套接字实现的简单客户端 服务器程序 3. 基于TCP套接字实现的简单客户端 服务器程序 1. 套接字 之前我们有分享到协议分层这个概念,其中就讲到上层协议调用下层协议,下层协议给上层协议提供支持,这里支持指的是就是socket套接字,它是操作系统给应用…

宁波市天一杯 --- Crypto wp

文章目录 secretrsa secret 题目: p134261118796789547851478407090640074022214132682000430136383795981942884853000826171189906102866323044078348933419038543719361923320694974970600426450755845839235949167391987970330836004768360774676424958554946…

坦克大战进阶--发射子弹

坦克大战进阶–发射子弹 1. 坦克大战0.3 1.1 分析 利用线程基础的知识,把坦克大战再次进阶一下:当我们按下J键,坦克就能够发射一颗子弹。 1.2 思路 当发射一颗子弹后,就相当于启动一个线程Mytank 有子弹的对象,当…

MSP432笔记5——外部中断

所用单片机型号:MSP432P401r 今日继续我的MSP432电赛速通之路。 外部中断是个很有用的配置 STM32几乎每个I/O口都能配置复用为外部中断 但MSP432并不是这样。 我经过查阅数据手册发现支持中断的引脚为: P1^0~ P1^7 P3^0~ P3^7 P5^0~ P5^…

Gateway服务网关入门

Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。…

【网络字节序】

网络字节序 我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。网络数据流同样有大端小端之分,那么如何定义网络数据流的地址呢?发送主机通常将发送…

【C++】21年精通C++之泛型编程和模板初阶知识

❤️前言 大家好!今天和大家一起学习关于C泛型编程和模板初阶的相关知识。 正文 我们之前已经学习了C中非常重要的一个特性——函数重载,函数重载很好地提高了我们代码的可读性。但是对于适配多种参数的某种函数来说,我们如果使用函数重载就…

感知程序从ros切换到cyber_rt框架下,pcl相关问题

1.在ubuntu20.04下,原感知程序需要的是pcl1.8.1,车上其他程序使用的是pcl.1.10.0或者pcl1.10.0,在编译pcl1.10.0时会编译通不过,而pcl1.10.1可以顺利编译通过,安装pcl1.8.1时遇到的问题可能如下,及对应的修…

CTF必看~ PHP反序列化漏洞6:绝妙_wakeup绕过技巧

作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。我的…

iptables防火墙2

iptables防火墙 一:SNAT原理与应用 SNAT 应用环境:局域网主机共享单个公网IP地址接入Internet(私有不能早Internet中正常路由)SNAT原理:修改数据包的源地址。 SNAT转换前提条件: 1.局域网各主机已正确设…

新星计划 Electron+vue2 桌面应用 2 搭建及运行

基础内容:新星计划 Electronvue2 桌面应用 1 基础_lsswear的博客-CSDN博客 根据使用过的经验和官网的描述,大概可以有四种方式: 自己创建项目(仅使用npm)用Electron脚手架HBuilder编译为web,再用Electron…

MSP432笔记4:时钟与滴答计时器

所用单片机型号:MSP432P401r 今日继续更新我的MSP432电赛速通笔记: 提示: 本节内容相当于讲述delay_ms() 和delay_us() 俩延时函数的由来, 所以不需要花费过多时间斟酌 MSP432单…

论文阅读_音频表示_wav2vec_2.0

论文信息 name_en: wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations name_ch: wav2vec 2.0:语音表示自监督学习框架 paper_addr: http://arxiv.org/abs/2006.11477 date_read: 2023-04-27 date_publish: 2020-10-22 tags: [‘深…