Python进阶之利用+和*进行列表拼接-每日快报

时间:2023-07-04 11:12:21 来源: 脚本之家
目录
引言对序列使用+和*由列表组成的列表嵌套列表创建的陷阱总结

引言

python作为一款深受大家喜爱的语言,一直都在时代的风口浪尖吸引了很多的人学习。在我们学习python的过程中,有一个非常常见的语法,那就是利用+和*进行序列的拼接以及其他操作。但是孰不住这个操作存在一个陷阱,今天就带大家从使用+和*进行拼接出发认识一个大家非常容易犯的代码错误。话不多说我们开始吧。


(资料图)

对序列使用+和*

在编写python的过程中,我们默认python的序列是支持+和*的操作的。例如在对序列相加的过程中,+号两边的序列需要是相同类型的序列,python会为我们创建一个相同类型的序列作为拼接的结果。请看下面这个例子:

string_01 = "abc"
string_02 = "def"

print(string_01 * 5)
print(string_01 + string_02)

>>>abcabcabcabcabc
>>>abcdef

另外,我们还可以在列表中使用上述代码进行拼接与合并,如下所示:

list_01 = [i for i in range(3)]
list_02 = [i for i in range(4,7)]

print(list_01 * 3)
print(list_01 + list_02)

>>>[0, 1, 2, 0, 1, 2, 0, 1, 2]
>>>[0, 1, 2, 4, 5, 6]

在这个过程当中,python不会修改原有的序列而是会新开辟一个空间存储合并后或者拼接后的序列。

由列表组成的列表

在有些情况下,可能需要我们建立一个嵌套着几个列表的列表,例如需要我们建立一个用于存储员工信息的嵌套列表。请看下面的代码:

worker_information = [["Nan"] * 3 for i in range(3)]
print(worker_information)

>>> [["Nan", "Nan", "Nan"], ["Nan", "Nan", "Nan"], ["Nan", "Nan", "Nan"]]

注意:上述代码中利用了生成器表达式来完成,还不是很了解的小伙伴可以点击下方文章了解一下。 【python进阶】你还在使用for循环新建数组?生成器表达式帮你一行解决

当我们想要修改其中的一项时,只需要进行常规的赋值就可以了,如下所示:

worker_information[0][0] = "王刚"
worker_information[0][1] = "20岁"
print(worker_information)

>>>[["王刚", "20岁", "Nan"], ["Nan", "Nan", "Nan"], ["Nan", "Nan", "Nan"]]

嵌套列表创建的陷阱

我们通过上述代码中的+和的应用使得我们快速创建了嵌套列表。但是,要注意当使用诸如an的表达式时,a不能是同一个引用。下面我们来看一个具体的例子来更好的说明这种情况,请看下面这段代码:

worker_information_bug = [["Nan"] * 3] * 3
print(worker_information_bug)

worker_information_bug[0][0] = "王刚"
print(worker_information_bug)

>>>[["Nan", "Nan", "Nan"], ["Nan", "Nan", "Nan"], ["Nan", "Nan", "Nan"]]
>>>[["王刚", "Nan", "Nan"], ["王刚", "Nan", "Nan"], ["王刚", "Nan", "Nan"]]

程序出现了意想不到的结果,当我们改变嵌套列表中的一个元素时,所有列表的元素都发生了改变。下面这段代码也是典型的错误,如下:

row = ["Nan"] * 3
worker_information_bug_02 = []
for i in range(3):
    worker_information_bug_02.append(row)

print(worker_information_bug_02)

worker_information_bug_02[0][0] = "王刚"
print(worker_information_bug_02)

>>>[["Nan", "Nan", "Nan"], ["Nan", "Nan", "Nan"], ["Nan", "Nan", "Nan"]]
>>>[["王刚", "Nan", "Nan"], ["王刚", "Nan", "Nan"], ["王刚", "Nan", "Nan"]]

上述两段代码的错误都是由于重复了同一个引用所导致的,在[["Nan"] * 3] 中我们建立了一个列表,但当这个结构被嵌套成[["Nan"] * 3] * 3时,其实我们只是在一个列表中放入了三个同一个列表的引用,而不是创建了三个列表。正确的做法应该如下:

worker_information_bug_02 = []
for i in range(3):
	# 每次循环都建立新的列表
    row = ["Nan"] * 3
    worker_information_bug_02.append(row)

print(worker_information_bug_02)

worker_information_bug_02[0][0] = "王刚"
print(worker_information_bug_02)

>>>[["Nan", "Nan", "Nan"], ["Nan", "Nan", "Nan"], ["Nan", "Nan", "Nan"]]
>>>[["王刚", "Nan", "Nan"], ["Nan", "Nan", "Nan"], ["Nan", "Nan", "Nan"]]

在上述代码中,我们在每次循环都建立了新的列表,这能够保证我们的修改正常进行。

总结

在本文中,我们介绍了对列表使用+和*进行拼接以及在利用其不当的过程中,可能会导致的问题希望大家都能够理解并注意。

到此这篇关于Python进阶之利用+和*进行列表拼接的文章就介绍到这了,更多相关Python列表拼接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

标签:

精彩推送

唯特偶6月30日快速上涨 全球报道

以下是唯特偶在北京时间6月30日09:32分盘口异动快照:6月30日,唯特偶

来源:2023.06.30

美的集团、山西汾酒等28股获北向资金增持额超5000万元

证券时报网讯,据wind统计显示,6月29日共有1504只个股获北向资金持股

来源:2023.06.30

【机构调研记录】中海基金调研隆基绿能、泽璟制药等4只个股(附名单)|世界短讯

个股亮点:全球最大的单晶硅片和组件制造企业;22年6月披露,隆基硅异

来源:2023.06.30

观焦点:大客车尺寸测量标准规范_大客车尺寸

1、一般长度在9-10米左右,大中小型客车(touringcoach)是一种为旅游

来源:2023.06.30

每日讯息!低筋粉是什么面粉?低筋面粉是什么粉?

一、低筋面粉是什么粉?①低筋面粉(cakeflour)蛋白质是含量在9 5%(含

来源:2023.06.30

【世界报资讯】合肥“监管护苗”行动严打隐形培训

记者6月29日从合肥市教育局获悉,5月12日至6月25日,合肥市教育局会同

来源:2023.06.30

汽车防抱死灯亮了还能开吗(汽车防抱死系统灯亮了什么原因)

想必现在有很多小伙伴对于汽车防抱死系统灯亮了什么原因方面的知识都比

来源:2023.06.30

头条焦点:国家的核心问题是什么问题_国家的核心问题政权

1、原因有两点政权掌握在哪个阶级的手里具有决定意义任何阶级实现和维

来源:2023.06.30

世界热门:高标运营 7月1日起兰州至西宁乘高铁最快59分钟可达

记者29日从中国国家铁路集团有限公司获悉,7月1日,兰新高铁兰州至西宁

来源:2023.06.30

新闻快讯

X 关闭

X 关闭

新闻快讯