零基础学Python:列表推导式及深浅拷贝

python深浅复制与列表推导式 文章目录一、深浅复制二、列表推导式 提示:以下是本篇文章正文内容,下面案例可供参考 一、深浅复制 ①浅复制 概念:浅复制是生成一个新的列表,把原列表的所有引用全复制到新列表中,切片返回的就是浅复制 在浅复制中,如若旧列表中包含有列表,在新列表中该表旧列表中列表元素时,旧列表也会随之改变,如: >>>aList=[3,5,7] >>>bList=aList[::] >>>aList==bList #这里的“==”是询问是否元素一样 阅读详情

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取

Python免费学习资料、代码以及交流解答点击即可加入


列表推导式

Python里面有个很棒的语法糖(syntactic sugar),它就是 list comprehension ,有人把它翻译成“列表推导式”,也有人翻译成“列表解析式”。名字听上去很难理解,但是看它的语法就很清晰了。虽然名字叫做 list comprehension,但是这个语法同样适用于dict、set等这一系列可迭代(iterable)数据结构。

语法规范:


其中的 if 条件判断根据需要可有可无。
下面看一个具体的例子,生成一个包含10以内的偶数的list:


由for循环升级到列表推导式:
在没有了解 list comprehension 之前,上面那个生成偶数list的通常做法是用 for 循环:


很明显, for 循环占用了4行代码,而 list comprehension 只用了1行代码。
文章开始说到推导式的语法规范时,我们讲了 if 表达式是可有可无的,这也符合我们编程遇到的实际情况。比如,要生成一个10以内的整数的平方的列表:


复杂的嵌套循环
我们先来看一个例子,把一个矩阵(以列表为元素的列表)展平为一个列表。首先,我们用 for 循环来实现一下:


接着我们用列表推导式实现该功能:


还是一行代码就搞定,但一行里面有两个 for ,看起来很乱,两个 for ,哪个在前哪个在后呢?只要记住他们的顺序和不用推导式的原始for循环是一致的即可。
推导式的可读性
一行代码搞定几行代码的事情,看上去很简洁,但是读起来很费劲,尤其是当条件语句很长的时候,把这一行代码变得很长,超过了代码规范规定的长度(一般是80个字符),也使得理解代码变得困难。

 

面对一行长长的代码该如何下口读,如何理解呢?别着急,好在Python允许在中括号、花括号之间断行:
列表推导式的断行:
断行前:


断行后:


带嵌套循环的推导式的断行:
断行前:


断行后:


字典(dict)和集合(set)的推导式
前面我们也提到过,推导式不仅仅适用于列表,它同样使用于字典dict和集合set。
把一个字典的key和value互换:


用一个列表的所有单词的首字母生成一个集合:


通过以上讲解就可以轻松掌握Python的列表推导式( list comprehension )了,简而言之,就是把普通的多行for循环压缩成一行代码,这种压缩语法适用于列表、字典、集合等可迭代数据结构(iterables)。

 

深浅拷贝

对象引用、浅拷贝、深拷贝(拓展、难点、重点)
Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果

其实这个是由于共享内存导致的结果

拷贝:原则上就是把数据分离出来,复制其数据,并以后修改互不影响。
先看 一个非拷贝的例子

使用=赋值(对象引用)

=赋值:数据完全共享
=赋值是在内存中指向同一个对象,如果是可变(mutable)类型,比如列表,修改其中一个,另一个必定改变

如果是不可变类型 (immutable) ,比如字符串,修改了其中一个,另一个并不会变

 

浅拷贝(copy)

浅拷贝:数据半共享(复制其数据独立内存存放,但是只拷贝成功第一层)

 

深拷贝(deepcopy)

深拷贝:数据完全不共享(复制其数据完完全全放独立的一个内存,完全拷贝,数据不共享)

深拷贝就是完完全全复制了一份,且数据不会互相影响,因为内存不共享。
深拷贝的方法有

 

总结:

copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
copy.deepcopy 深拷贝 拷贝对象及其子对象

掌握Python列表的深浅拷贝与别名机制 本章节深入探讨了Python列表的深浅拷贝与别名机制,通过实例解释了列表的可变性如何影响变量间的关系,以及如何利用这些机制来优化代码和避免常见的编程错误。同时,还介绍了列表推导式在创建和操作列表时的便捷性以及如何正确使用它。 阅读详情

相关推荐

利用Pandas进行高效网络数据获取

本文将重点介绍如何使用Pandas库进行网络爬虫。爬取数据是获取互联网上信息的常见方式之一,而Pandas作为一种强大的数据处理和分析工具,为我们提供了便捷的方法来处理和清洗从网页上获取的数据。文章将从爬取网页数据开始,包括使用Python的Requests库发送HTTP请求获取网页内容,并使用Pandas的功能来解析和提取所需的数据。我们还将讨论如何处理网页中的表格数据、处理和清洗数据、保存数据到文件等常见任务。

ak_bingbing的博客 1438

列表推导式

“”" 任务:给定一个列表,使用列表推导式来复制它,并筛选掉其中的负数,打印复制后的列表。 “”" list1 = [2,3,-43,4,5,-5,4,-535,34,5,345,-3,45,3,6,345,-546,546,34,-56,34,5,86,7,0,12341,979,7,67,-856,454,8,-64,342,-63,568] 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码 ########### Begin ########### 使用列表推导式来复制给定的列表,并

Claire_girl的博客 4000

Selenium ChromeDriver反爬与性能优化实战指南

ChromeDriver作为Selenium的核心驱动,本质是浏览器自动化执行引擎,其默认行为会暴露大量JS运行时指纹(如navigator.webdriver、window.chrome),极易被前端反爬系统识别;同时因进程管理粗放、渲染等待机制僵化,导致内存泄漏、僵尸进程和高并发下稳定性崩塌。本文围绕真实生产场景,系统解析浏览器指纹伪造原理、进程级资源管控策略、基于页面状态的智能等待范式,并提供Docker容器化、K8s弹性扩缩与Prometheus可观测性落地路径,助力开发者将ChromeDriver

weixin_29762151的博客 1259

python列表推导格式(含正负数筛选实例)

本博文源于python基础,主要推导式的一些相关内容。推导分为列表推导、字典推导和集合推导,这次讲解列表推导和字典推导。

执念斩长河 1890

无线通信入门:3种键控法(ASK/FSK/PSK)原理图解与实战对比

本文深入解析无线通信中ASK、FSK、PSK三种基础键控法的原理与应用。通过图解对比,阐明幅移键控(ASK)简单低成本但抗干扰差,频移键控(FSK)稳健且应用广泛,相移键控(PSK)高效但复杂。文章结合实战场景,为物联网和嵌入式开发者在选型时提供关键指导,帮助平衡数据速率、成本、功耗与抗干扰需求。

weixin_29274969的博客 188

P450酶催化循环的Amber-Gromacs混合模拟实战:从血红素加氧到产物释放

本文详细介绍了针对P450酶完整催化循环的Amber-Gromacs混合模拟实战策略。通过Amber为关键氧合血红素中间体(CPDI)构建精确力场,再利用Gromacs的高效GPU加速进行长时间尺度动力学模拟,完整覆盖从底物结合到产物释放的催化过程,为研究酶催化机制提供了强大的计算工具。

weixin_29201859的博客 315

python教程13-列表推导式、深拷贝与浅拷贝、元组的使用、字典的使用、字典注意事项、数组里获取数据

python教程_小白入门13/2020/08/20 学习目标 文章目录python教程_小白入门13/2020/08/20P88 列表推导式的使用P89 列表推导式的练习P90 深拷贝和浅拷贝介绍P91 元组的使用P92 字典的基本使用P93 字典使用注意事项P94 从字典里获取数据 P88 列表推导式的使用 # 列表推导式作用是使用简单的语法创建一个列表 # nums = [i for i in range(10)] # print(nums) # [0, 1, 2,

zjl_xiaoliu的博客 415

Opencv全景图像处理实战:柱面与透视展开技术详解

本文详细解析了使用OpenCV实现全景图像处理的两种核心技术:柱面展开与透视展开。通过原理拆解与实战代码演示,指导开发者将360度环绕的鱼眼或球面图像转换为可用的平面视图,适用于街景展示、车载环视、室内测量等计算机视觉应用场景。

weixin_29081163的博客 583

python基础二_03_推导式和深浅拷贝

本文主要记录自己学习python3基础中推导式(列表,字典,集合)和深浅拷贝的要点知识和例子;仅供自己梳理。

Hades的博客 276

PlayReady Encrypt XAP 解密讨论

目前WP7市场上的绝大部分XAP都被MS进行了加密,经过分析,这个加密方式采用了AES方式进行了加密,本人经过对新的XAP格式(PRE)进行了分析,发现新的格式里,实际上是对之前PK(ZIP格式)的XAP进行了加密然后封装:   typedef struct {   DWORD HDR; // 0x07455250 : PRE & 0x7   DWORD a1; // always 0x1   D

u013729125的专栏 1508

windows exe爬虫:exe抓包

在不知情所拦截应用使用的流量时,所以建议用Wireshark。本文利用python代码,实现自动拦截,写入pcap包,并用代码分析流量的协议。这样会在本地目录下生成capture_inbound.pcap,可以用wireshark分析,也可以利用python代码进行分析,如果使用python代码进行分析,需要借助pyshark或者scapy。使用的python WinDivert的包,当然前提也是需要安装Wireshark软件,设置环境变量,并安装pydirvert包。

youbingchen的博客 617

Python必备基础(四):列表深浅拷贝、列表推导式和元组

当我们给一个变量赋值时,这个变量存的值其实不是值的内容,而是值的存储地址;当我们创造一个值,程序会在内存中开辟一个地址,然后把地址赋值给这个变量,当下次读取次变量时,变量会根据地址去拿到具体的值;

chenzijun2016的博客 1307

SAP_PP模块定额工艺路线简介

在 SAP PP(生产计划)模块中,定额工艺路线(Routing) 是生产制造流程中的核心主数据之一,用于定义制造一个产品所需的标准操作步骤。工艺路线详细描述了生产过程中的各个工序、使用的工作中心、标准作业时间、资源分配等信息,是进行生产计划、成本核算、排产控制、车间执行等功能的基础。

我小时候很黑的博客 765

【零基础学python】python高级语法(三)

浅拷贝(shallow Copy)是创建一个新的列表对象,该对象与原始列表共享相同的元素对象。是指创建后不能更改其值或状态的对象。如果对不可变类型的对象进行修改,将会创建一个新的对象,原始对象的值保持不变。2,元组使用圆括号()来表示,其中的元素可以是任意类型,并且可以包合重复的元素。列表推导式(List comprehensions)是一种简洁的语法,用于创建新的列表,并可以在创建过程中对元素进行转换、筛选或组合操作。1,元组(Tuple)是Python中的一种数据类型,它是一个有序的、木可变的序列。

星凡的技术进阶博客 1086

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

day 11:列表推导式与深浅拷贝

1、列表推导式 通过使用列表推导式,用简洁的代码实现复杂功能 例如: 打印10与10各个数字的组合 res = [(x,y) for x in range(10) for y in range(10)] print(res) 打印偶数奇数的组合 res = [(x,y) for x in range(10) if x%2==0 for y in range(10) if y%2==...

JJ1M8的博客 250

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【Python零基础到进阶】字典、深拷贝与浅拷贝、列表推导式

【Python零基础到进阶】字典、深拷贝与浅拷贝、列表推导式

m0_75067840的博客 885

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

(5)Python列表

简介:本文从列表是什么到增删改查,讲解了常用函数和进阶的深浅拷贝和列表推导式的原理。尤其是在深浅拷贝和列表推导式,需要大家着重理解,多尝试使用。尽管不可避免的涉及到了一些本专栏尚未讲过的if和for和可迭代对象,我将在第六篇第九篇和第十一篇去讲。但是这并不影响,只要你踏踏实实的去读文章,你依然可以去将Python列表掌握的扎实。我也希望得到你们的关注和支持,本专栏也会为你的Python学习打下扎实的基础。

qq_54414907的博客 1506

numpy array的深浅拷贝 & python list的深浅拷贝

参考numpy array的深浅拷贝 & python list的深浅拷贝 python list的深浅拷贝 list2=list1 是赋值操作,不是拷贝。两个是同一个对象的引用。故而同变化 list2=list1.copy()是浅拷贝,相当于list2引用一个新对象,然后把list1中的值拷贝到这个新对象中。但是如果list1=[1,[1,2],3]包含嵌套,嵌套第一层拷贝过去的是值,第二层保存的实际是地址,所以拷贝过去的也是地址,这样修改list2[1][0]=3的话,实际上list1的相应的

Graceying的博客 392

深浅拷贝和列表生成器

深浅拷贝 对象的拷贝 深浅拷贝 import copy copy.copy # 浅拷贝,仅仅拷贝对象的第一层对象 copy.deepcoy # 深拷贝,会递归拷贝 浅拷贝:拷贝不可变类型不会给拷贝的对象开辟新的内存空间,而只是拷贝了这个对象的引用。对可变类型的第一层对象进行拷贝,对拷贝的对象会开辟新的内存空间进行存储,子对象不进行拷贝。 深拷贝:不可变类型进行深拷贝如果子对象没有可变...

iRebeca的博客 264

python基础之深浅拷贝、列表推导式、排序查找算法、元组、字典

1.列表小练兵 """ 已知列表list1 = ['a','b','c'],使用系统功能完成下面操作 a.在列表的末尾追加一个元素'd' b.在下标为1的位置插入一个元素'e' c.统计元素'a'出现的次数 d.将列表元素反转 e.将列表降序排序 f.获取列表长度 """ list1 = ['a','b','c'] # a. list1.append("d") # append--->abc ---->["abc"] list1.extend("d") #

qq_45403803的博客 898

Python基础学习三(字典、集合、类型转换、深浅拷贝、函数基础、函数进阶)

文章目录一、字典1、字典的定义2、字典的格式3、字典的常见操作二、集合1.集合的定义2.集合的定义格式3、集合的常见操作4、交集与并集三、类型转换和列表推导式3.1 类型转换3.2 列表推导式四、深浅拷贝五、函数基础1、函数的定义格式及调用2、函数的形参和实参及四大参数3、返回值4、函数嵌套六、函数进阶1、作用域——局部变量,全局变量(global,nonlocal关键字)2、匿名函数3、内置函数4、拆包 一、字典 1、字典的定义 字典是一系列的键-值对,键和值之间使用冒号隔开,而键-值对之间使用逗号隔开

weixin_45377154的博客 749

Python中深浅拷贝和生成器

在之前的学习中,遇到的copy都只是简单的浅拷贝,相对应得也有深拷贝 1.深浅拷贝 对象的拷贝 import copy copy.copy: 浅拷贝,仅仅拷贝对象的第一层 copy.deepcopy: 深拷贝,会递归拷贝 浅拷贝: 深拷贝: 可以看到c能将123123也拷贝到,是一种递归拷贝,而b不行,这就是深拷贝。 2.生成器 列表推导式 i for i in range(101) i f...

qq_44913154的博客 362

【2025】python基础一:ifelse&三目运算符&while/for循环,list\tuple\set\dict&字符串格式化&列表推导式&编码/解码&时间格式化&深浅拷贝&可变/不可变对象

本文总结了Python基础语法中的关键知识点,包括条件判断(if-else、三目运算符)、循环结构(while/for循环及嵌套)、常用数据结构(list、tuple、set、dict)、字符串操作(格式化、索引、切片、查找)、编码解码(encode/decode)、时间格式化、深浅拷贝以及可变/不可变对象等。重点展示了字符串的多种格式化方法(%占位、format()和f-string),并通过九九乘法表示例演示循环嵌套应用。同时对比了find()和index()的查找差异,以及break和continue

白骨梦儿 1205

Python高级编程-- == 和 is、深浅拷贝

1、== 和 is 在Python中 == 判断的是两个变量的值 在Python中 is用来判断两个变量的内存地址是否相等 id全局函数的使用 常量缓存区 小整形常量缓存区 2、深浅拷贝 对象的拷贝 import copy copy.copy ( 浅拷贝,仅仅拷贝对象的第一层对象) copy.deepcoy ( 深拷贝,会递归拷贝) 3、生成器 列表推导式 [i for ...

qq_44913378的博客 191
上一篇: Python 爬虫:单线程、多线程和协程的爬虫性能对比
下一篇: python绘制高颜值房价与地铁线路分布图
酸菜鱼编程
博客等级 码龄6年 155粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值