吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1361|回复: 15
收起左侧

[讨论] 讨论关于python 列表创建并赋初值方式

[复制链接]
smarth 发表于 2020-12-9 19:34
本帖最后由 smarth 于 2020-12-9 21:27 编辑

新注:0、由于我直接将typora中文字直接复制在论坛编辑器中,导致排版极其恶劣,在此道歉。
           1、由于我不知道创建列表是出现的错误叫什么,且其和‘复制列表’中浅复制极其类似,故把它称为”浅复制“。(欢迎大佬指出真名)

           2、本贴所有内容均为原创
          (2020.12.9.21:01)

注:0、限于水平(大一),本帖内容难免存在疏漏、错误,欢迎指正讨论。   
       1、待可能有的讨论结束或我深入学习后将完善此贴
       2、本贴中的代码列举了创建列表的几种方式及其输出结果,情况各异。


python 中复制列表有浅复制(shallow copy)和深复制(deep copy)之说
浅复制只是给列表起个别名,并没有真正创建新列表。(留坑,等我学明白再来填坑)
在创建列表时也有类似的情况(详见下列代码)。

代码0:
[Python] 纯文本查看 复制代码
mat = [None] *3
mat[0] = 5
print(mat)

输出:
[Python] 纯文本查看 复制代码
[5, None, None]

代码1:
[Python] 纯文本查看 复制代码
mat = [[None] for i in range(3)]
print(mat)
mat[0] = 5
print(mat)

输出:
[Python] 纯文本查看 复制代码
[[None], [None], [None]]
[5, [None], [None]]
#原本创建的是二维数组,由于使用mat[0] 赋值使原来索引为 0 的‘列表’[None]变为‘数值’5

代码2:
[Python] 纯文本查看 复制代码
at = [[None] for i in range(3)]
print(mat)
mat[0][0] = 5
print(mat)
#与代码2对照

输出:
[Python] 纯文本查看 复制代码
[[None], [None], [None]]
[[5], [None], [None]] 

代码3:
[Python] 纯文本查看 复制代码
mat = [None for i in range(3)]
print(mat)
mat[0] = 5
print(mat)

输出:
[Python] 纯文本查看 复制代码
[None, None, None]
[5, None, None]

代码4:
[Python] 纯文本查看 复制代码
mat = [[None for i in range(3)] ]
print(mat)
mat[0][0] = 5
print(mat)

输出:
[Python] 纯文本查看 复制代码
[[None, None, None]]
[[5, None, None]]

代码5:
[Python] 纯文本查看 复制代码
mat = [[None] * 3] *3
print(mat)
mat  [0][0]=  5
print(mat)

输出:
[Python] 纯文本查看 复制代码
[[5, None, None], [5, None, None], [5, None, None]]
#出现浅复制

代码6:
[Python] 纯文本查看 复制代码
mat = [[None] for i in range(2)] *3
mat[0][0] = 5
print(mat)

输出:
[Python] 纯文本查看 复制代码
[[5], [None], [5], [None], [5], [None]]
#出现浅复制

代码7:
[Python] 纯文本查看 复制代码
mat = [[None for i in range(2)] for i in range(3)]
mat[0][0] = 5
print(mat)

输出:
[Python] 纯文本查看 复制代码
[[5, None], [None, None], [None, None]]

代码8:
[Python] 纯文本查看 复制代码
mat = [[None] for i in range(3)] for i in range(2)

输出:
[Python] 纯文本查看 复制代码
报错

代码9:
[Python] 纯文本查看 复制代码
mat = [[None] * 2 for i in range(3)]
mat[0][0] = 5
print(mat)

输出:
[Python] 纯文本查看 复制代码
[[5, None], [None, None], [None, None]]

代码10:
[Python] 纯文本查看 复制代码
mat = [([None] for i in range(3)) for i in range(2)] 

输出:
[Python] 纯文本查看 复制代码
[<generator object <listcomp>.<genexpr> at 0x000001D5EE384270>, <generator object <listcomp>.<genexpr> at 0x000001D5EE3842E0>]

可行的一维列表创建并赋初值方式:
[Python] 纯文本查看 复制代码
mat = [None] *3

mat = [None  for i in range(3)]

可行的二维列表创建并赋初值方式:
[Python] 纯文本查看 复制代码
mat = [[None for i in range(2)] for i in range(3)]

mat = [[None] * 2 for i in range(3)]

免费评分

参与人数 2吾爱币 +5 热心值 +2 收起 理由
李玉风我爱你 + 2 + 1 可以先学习下怎么插入代码 加油
luanshils + 3 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

luanshils 发表于 2020-12-9 20:02
兄弟,格式,格式呀,建议是插入代码,文字说明用注释形式体现
yep96 发表于 2020-12-9 20:16
这看着就是复制别人的吧。。
其实浅复制就 另一个名字=列表
深复制就 另一个名字=列表.copy()
n3iuarem3t 发表于 2020-12-9 20:29
 楼主| smarth 发表于 2020-12-9 20:56
n3iuarem3t 发表于 2020-12-9 20:29
你的这各格式让人没有看下去的欲望

好像是因为当时网络问题,本来好好的刷新一下就成这样
 楼主| smarth 发表于 2020-12-9 21:28
luanshils 发表于 2020-12-9 20:02
兄弟,格式,格式呀,建议是插入代码,文字说明用注释形式体现

已该,谢谢
 楼主| smarth 发表于 2020-12-9 21:29
yep96 发表于 2020-12-9 20:16
这看着就是复制别人的吧。。
其实浅复制就 另一个名字=列表
深复制就 另一个名字=列表.copy()

全是我写的,只是因为我不知道它叫什么
“在创建列表时也有类似的情况”(摘自原文)
 楼主| smarth 发表于 2020-12-9 21:36
yep96 发表于 2020-12-9 20:16
这看着就是复制别人的吧。。
其实浅复制就 另一个名字=列表
深复制就 另一个名字=列表.copy()

还有一点就是你说的深复制并不真正”深",真正的深复制需要用到copy库中的deepcopy函数(似乎,我还没细学)
rsnodame 发表于 2020-12-9 21:40
直接 mylist = []
 楼主| smarth 发表于 2020-12-9 21:44

是直接申明空列表吗?
我这是针对需要知道列表长度的创建方法(会加上去)
感谢回复
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 10:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表