python嵌套列表知多少
今天在创建嵌套列表时遇到一个问题,决定看看到底是谁在背后捣鬼
>>> board1 = [[0]*3 for _ in range(3)]
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> board2 = [[0]*3]*3
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
没错,看起来两种方法都可以创建嵌套列表,但是赋值的时候却出现了问题
>>> board1[1][1] = 1
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]
>>> board2[1][1] = 1
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
查阅资料,发现这是 board2 列表内的 3 个引用指向同一个对象的原因。作为一只菜鸟,仍然不解其意,又看到了下面的例子
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> board3 = []
>>> for i in range(3):
... row=[0] * 3
... board3.append(row)
...
>>> board3
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> board3[1][1] = 1
>>> board3
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]
board3 和 board1 是一样的,每次迭代新建了一个列表,意味着列表的每行指向不同的地址。
再看下面的例子
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> board4 = []
>>> row=[0] * 3
>>> for i in range(3):
... board4.append(row)
>>> board4
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> board4[1][1] = 1
>>> board4
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
board4 和 board2 是一样的,每次迭代都添加同一个对象到列表,意味着列表的每行指向了同一块地址。
为什么会这样?
这是引用和可变对象背后的原理和陷阱。
python 中默认是做浅复制,假如list1 是一个列表,list(list1) 或 list1[:] 都会创建 list1 的副本,它们做的是浅复制(只复制了最外层容器,副本中元素依然是源容器中元素的引用)。浅复制共享同一个列表对象
为了清楚的理解它们到底是如何运行的,我们将下面创建嵌套列表的过程进行可视化
board1 = [[0]*3 for _ in range(3)]
board1[1][1] = 1
board2 = [[0]*3]*3
board2[1][1] = 1
第一行:
首先创建一个可迭代对象,在循环体中创建[0]*3 赋值到新列表对应位置
可以看到,嵌套列表内每个子列表占用单独的空间,所以赋值操作 board1[1][1] = 1
只会改变其中一个
第三行:
嵌套列表内的三个子列表指向同一个对象,所以赋值操作会造成我们最初看到的情形。
python嵌套列表知多少相关推荐
- python嵌套列表法实现树_python – 将嵌套的括号树转换为嵌套列表
我有一个树结构文件,其中括号用于表示树.这是将代码转换为 python嵌套列表的代码 def foo(s): def foo_helper(level=0): try: token = next(to ...
- python嵌套列表操作方法_python中多层嵌套列表的拆分方法
场景:有一个多层嵌套的列表如:[[23],[3,3],[22,22],1,123,[[123,a],2]] 拆分成: def splitlist(list): ''' 现有一个列表,里面元素包括 数字 ...
- Python嵌套列表解析式(又称列表推导式)写法剖析与应用举例
#嵌套列表解析式又称嵌套列表推导式,功能非常强大,但是初学者难以摸清其书写规则. #以下实例展示了嵌套列表解析的写法. #嵌套列表解析表达是的书写规则是层层嵌套. #嵌套层的一般形式为:for out ...
- python嵌套列表操作_python 列表增删改查 嵌套 相关操作
---恢复内容开始--- 今日内容: 一.列表 1. 列列表的介绍 列列表是python的基础数据类型之⼀一 ,其他编程语⾔言也有类似的数据类型. 比如JS中的数 组, java中的数 ...
- python嵌套列表怎么遍历_Python中遍历列表,循环嵌套
1.遍历列表中的元素:用for(操作元素)和while(操作索引)实现 #将列表中的所有元素打印出来 #for循环主要结合成员运算符使用,此时只能操作元素 list1= ["and" ...
- python嵌套列表操作_python基础(list列表的操作,公共方法,列表嵌套,元祖)...
list 列表 索引,切片与str相同. 列表的操作(增删改查) 1,增加 .append() 追加,增加到最后 li = ['alex','wusir','egon','女神','taibai'] ...
- python嵌套列表索引 index_Python:嵌套lis中元素的索引列表
在Python2.6或更高版本中next((i for i, sublist in enumerate(nested_list) if "a" in sublist), -1) 假 ...
- python嵌套列表元素和_Python嵌套列表内部比较和编辑
a = [[1, 2, 4], [2, 5], [0, 3, 7, 8], [12, 3, 6], [18, 14]] result = [] for s in a: s = set(s) for t ...
- python嵌套列表字典_python中嵌套列表转为字典
题目: # 有一组用例数据如下: cases = [ ['case_id', 'case_title', 'url', 'data', 'excepted'], [1, '用例1', 'www.bau ...
最新文章
- idea缩写快捷键_idea快捷键大全
- Java 8中处理集合的优雅姿势——Stream
- c语言uint赋值给int,如何在C#中将uint转换为int?
- [xmlpull]XmlPull常见错误
- 【机器学习实战】极大似然法
- 生成证书密钥RequestsDependencyWarning:Old version of cryptography ([1, 2, 3]) may cause slowdown.
- 最短路径问题(信息学奥赛一本通-T1342)
- 引入Vant-UI全部组件的代码 - (备份)
- 成都理工大学“自然地理学”专业转行AI之路(精彩直播回放)
- 阿里云主机(aliyun-Linux) x64安装Redis详解
- deploy owned private docker registry based on docker HUB registry image
- 帝国cms+php7.0+mysql_帝国cms切换php7.x登录后台空白解决方法
- Win10网络图标消失,网络图标变成灰色,打开网络设置闪退等问题解决
- mq消息队列到底是什么
- html知识点整理(全)
- HTTP基础知识(仅介绍涉及R语言爬虫部分)
- 文本框获取焦点后出现的边框,怎么去掉
- Linux内核配置选项详解
- STM8L101F3P6低功耗
- 个人理解,关于python 的__init__.py 以及 __all__ 的用法