导言

‍♂️作者简介:生鱼同学,大数据科学与技能专业硕士在读‍,曾获得华为杯数学建模国家二等奖,MathorCup 数学建模比赛国家二等奖,亚太数学建模国家二等奖。

✍️研究方向:杂乱网络科学

爱好方向:运用python进行数据剖析与机器学习,数学建模比赛经验交流,网络爬虫等。

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进阶】对列表使用+和*进行拼接?这个陷阱要小心