讨论关于python 列表创建并赋初值方式
本帖最后由 smarth 于 2020-12-9 21:27 编辑新注:0、由于我直接将typora中文字直接复制在论坛编辑器中,导致排版极其恶劣,在此道歉。
1、由于我不知道创建列表是出现的错误叫什么,且其和‘复制列表’中浅复制极其类似,故把它称为”浅复制“。(欢迎大佬指出真名)
2、本贴所有内容均为原创
(2020.12.9.21:01)
注:0、限于水平(大一),本帖内容难免存在疏漏、错误,欢迎指正讨论。
1、待可能有的讨论结束或我深入学习后将完善此贴
2、本贴中的代码列举了创建列表的几种方式及其输出结果,情况各异。
python 中复制列表有浅复制(shallow copy)和深复制(deep copy)之说
浅复制只是给列表起个别名,并没有真正创建新列表。(留坑,等我学明白再来填坑)
在创建列表时也有类似的情况(详见下列代码)。
代码0:
mat = *3
mat = 5
print(mat)
输出:
代码1:
mat = [ for i in range(3)]
print(mat)
mat = 5
print(mat)
输出:
[, , ]
, ]
#原本创建的是二维数组,由于使用mat 赋值使原来索引为 0 的‘列表’变为‘数值’5
代码2:
at = [ for i in range(3)]
print(mat)
mat = 5
print(mat)
#与代码2对照
输出:
[, , ]
[, , ]
代码3:
mat =
print(mat)
mat = 5
print(mat)
输出:
代码4:
mat = [ ]
print(mat)
mat = 5
print(mat)
输出:
[]
[]
代码5:
mat = [ * 3] *3
print(mat)
mat=5
print(mat)
输出:
[, , ]
#出现浅复制
代码6:
mat = [ for i in range(2)] *3
mat = 5
print(mat)
输出:
[, , , , , ]
#出现浅复制
代码7:
mat = [ for i in range(3)]
mat = 5
print(mat)
输出:
[, , ]
代码8:
mat = [ for i in range(3)] for i in range(2)
输出:
报错
代码9:
mat = [ * 2 for i in range(3)]
mat = 5
print(mat)
输出:
[, , ]
代码10:
mat = [( for i in range(3)) for i in range(2)]
输出:
[<generator object <listcomp>.<genexpr> at 0x000001D5EE384270>, <generator object <listcomp>.<genexpr> at 0x000001D5EE3842E0>]
可行的一维列表创建并赋初值方式:
mat = *3
mat =
可行的二维列表创建并赋初值方式:
mat = [ for i in range(3)]
mat = [ * 2 for i in range(3)]
兄弟,格式,格式呀,建议是插入代码,文字说明用注释形式体现 这看着就是复制别人的吧。。
其实浅复制就 另一个名字=列表
深复制就 另一个名字=列表.copy() 你的这各格式让人没有看下去的欲望 n3iuarem3t 发表于 2020-12-9 20:29
你的这各格式让人没有看下去的欲望
好像是因为当时网络问题,本来好好的刷新一下就成这样 luanshils 发表于 2020-12-9 20:02
兄弟,格式,格式呀,建议是插入代码,文字说明用注释形式体现
已该,谢谢 yep96 发表于 2020-12-9 20:16
这看着就是复制别人的吧。。
其实浅复制就 另一个名字=列表
深复制就 另一个名字=列表.copy()
全是我写的,只是因为我不知道它叫什么
“在创建列表时也有类似的情况”(摘自原文)
yep96 发表于 2020-12-9 20:16
这看着就是复制别人的吧。。
其实浅复制就 另一个名字=列表
深复制就 另一个名字=列表.copy()
还有一点就是你说的深复制并不真正”深",真正的深复制需要用到copy库中的deepcopy函数(似乎,我还没细学) {:301_1009:} 直接 mylist = [] rsnodame 发表于 2020-12-9 21:40
直接 mylist = []
是直接申明空列表吗?
我这是针对需要知道列表长度的创建方法(会加上去)
感谢回复
页:
[1]
2