IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python - 列表补充(二) -> 正文阅读

[Python知识库]Python - 列表补充(二)

🐍列表复制

数据是在编程逻辑中经常遇到的,复制意味着产生了数据的副本。大量数据在工作中其实也需要备份。列表的功能就是能够把大量的数据放在一起,但列表里的数据是可以进行增删改查的,数据一旦发生了变化,就不能回复到原来的样子了。如果还需要对原来的数据进行查验,没有备份就很难做到了。

列表复制的代码如下:

lists1 = [1,2,3,4]
lists2 = lists1
print("列表1:"+str(lists1))
print("列表2:"+str(lists2))

请添加图片描述

实际上就是将lists1的内存地址赋值给了lists2的内存地址,这与变量的引用还是有差别的。列表指向的是一个地址,当改变了地址指向的值时,两个列表的值就发生了改变。

  • 直接赋值操作

现在用直接赋值操作将lists2 = lists1这种复制做一下改变,即改变lists1中的数值。代码如下:

lists1 = [1,2,3,4]
lists2 = lists1
print("列表1:"+str(lists1))
print("列表2:"+str(lists2))
lists1[1] = 5
print("发生赋值变化后")
print("列表1:"+str(lists1))
print("列表2:"+str(lists2))

运行结果如下:
在这里插入图片描述
从运行结果上可以发现,两个列表的值都发生了改变。原因是列表指向的是列表中元素的内存地址。列表和列表发生赋值变化,实际上地址指向相同,不是又发生了一个内存空间。当改变其中一个元素内存地址中的值时,同个列表就都发生了变化,这是由内存地址中的指向没有发生改变引起的。

  • 浅复制

使用lists2 = lists1.copy()来产生复制出的列表。copy()方法就是浅复制。代码如下:

lists1 = [1,2,3,4]
lists2 = lists1.copy()
print("列表1:"+str(lists1))
print("列表2:"+str(lists2))
lists1[1] = 5
print("发生赋值变化后")
print("列表1:"+str(lists1))
print("列表2:"+str(lists2))

运行结果如下:
在这里插入图片描述
从运行结果来看,浅复制后的列表并没有改变原始数据。从原理上来说,浅复制的第一层创建的是新的内存地址,但其实只限于第一层,而从第二层开始,指向的还是同一个内存地址。所以,对于第二层及更深的层数来说,还是保持了一致性。如图所示:
请添加图片描述

浅复制产生的列表并没有产生关联的关系,对原列表或新列表进行增删改都不会对没有发生增删改数据的列表产生影响,使列表的历史数据被保留。浅复制都是对第一层地址的,只为第一层开辟空间,后面第二层或更深层都保持了一致性。如图所示:

请添加图片描述
从图中可以看出,lists1和lists2第一层都指向各自的内存地址,第二层就指向了公共的内存地址,由此可见,当第二层或更深层的数据发生改变时,他们的一致性是同步的。对于列表中含有列表这样的数据,浅复制是没有完成完全意义上的复制的。

  • 深复制

使用深复制需要导入copy模块,使用deepcopy()方法完成。代码如下:

import copy
xiyouji = ["唐僧",["孙悟空","猪八戒","沙和尚"]]
another_xiyouji = copy.deepcopy(xiyouji)
print("原始西游记:"+str(xiyouji))
print("复制西游记:"+str(another_xiyouji))
another_xiyouji[0] = "唐三藏"
print("修改第一层内容后")
print("原始西游记:"+str(xiyouji))
print("复制西游记:"+str(another_xiyouji))
another_xiyouji[1][0] = "齐天大圣"
another_xiyouji[1][1] = "猪悟能"
another_xiyouji[1][2] = "沙悟净"
print("修改第二层内容后")
print("原始西游记:"+str(xiyouji))
print("复制西游记:"+str(another_xiyouji))

运行结果如下:
在这里插入图片描述
由结果可以看出,把第一个列表的人物深复制后,深复制的列表数据更改后并没有影响到原始列表。深复制就是为列表的复制一直开辟新的内存空间。深复制后在内存中的保存形式如下图:
请添加图片描述
由此可以看出,深复制不仅在第一层开辟了新的内存地址,在第二层也同样开辟了新的内存地址,直到当前的内容指向的不再是一个地址,而是一个数值。

🐍字符串切分成列表split()方法

split()方法可以方便的按指定格式对字符串进行拆分并返回一个列表。

  • 网址的分割
urls = "www.neea.edu.cn"
nets = urls.split(".")
print(nets)

split()方法中传入了一个参数".",该参数就是进行切分的依据。
split()方法的语法格式如下:

strs.split(str = " ",num = string.count(str))[n]

其中,strs就是字符串变量的名字,第一个参数str = " “表示分隔符,默认为空格,但不能为空(”")。若字符串中没有分隔符,则整个字符串作为列表的第一个元素。第二个元素num表示分隔次数,分割成num+1个字符串。[n]表示选取第n个切片。

分割的字符串还可以通过几个变量来接收,如用host来接收第一个字符串,代表主机;用domain来接收第二个字符串,代表主域名;用orig来接收第三个字符串,代表组织;用area来接收第四个字符串,代表地区。代码如下:

urls = "www.neea.edu.cn"
host,domain,orig,area = urls.split(".")
print(host,domain,orig,area)
  • 统计字符串中某个字符个数

split()方法是对字符串进行切割,功能不能改变,但是可以吧一个字符串按照某一字符切割后,计算得到的列表的长度减一就是这个字符在这个字符串中出现的次数。
如计算“楼前相望不相知,陌上相逢讵相识?”这句诗中“相”的个数。具体代码如下:

strs = "楼前相望不相知,陌上相逢讵相识?"
shi_counts = strs.split("相")
print(shi_counts)
print("诗中相的个数为" + str(len(shi_counts)-1))

运行结果如下:
在这里插入图片描述

🐍查找某个元素在列表中的个数

可以使用count()方法,如:

list1 = [121,232,343,454,121,565,121,676]
print(list1.count(121))

今天的内容就到这里,拜了个拜~

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:26:58  更:2022-02-26 11:31:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:53:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码