鱼C论坛

 找回密码
 立即注册
查看: 1561|回复: 6

[已解决]列表赋值问题

[复制链接]
发表于 2018-1-4 10:09:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. >>> c=[['z']*12]*8
  2. >>> c[0]
  3. ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z']
  4. >>> c[0][1]='我会出现在哪?'
  5. >>> c
  6. [['z', '我会出现在哪?', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', '我会出现在哪?', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', '我会出现在哪?', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', '我会出现在哪?', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', '我会出现在哪?', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', '我会出现在哪?', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', '我会出现在哪?', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', '我会出现在哪?', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z']]
  7. >>>
复制代码


请问为什么我要对c列表中第0个小列表中的第1个元素进行赋值,而c列表中所有小列表的第1个元素都发生了更改?
如何修改代码才能只对c列表中第0个小列表中的第1个元素进行赋值?
最佳答案
2018-1-4 10:16:32
问题出在c=[['z']*12]*8
这样每个['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z']都指向同一地址,即c[0],c[1]....改变其一其他都会跟着改变。
这样写,就不会出现此现象了。
  1. c=[['z']*12]*8
  2. c = [['z' for i in range(12)] for j in range(8)]
  3. c[0][1]='我会出现在哪?'
复制代码
  1. >>> c
  2. [['z', '我会出现在哪?', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z']]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-4 10:16:32 | 显示全部楼层    本楼为最佳答案   
问题出在c=[['z']*12]*8
这样每个['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z']都指向同一地址,即c[0],c[1]....改变其一其他都会跟着改变。
这样写,就不会出现此现象了。
  1. c=[['z']*12]*8
  2. c = [['z' for i in range(12)] for j in range(8)]
  3. c[0][1]='我会出现在哪?'
复制代码
  1. >>> c
  2. [['z', '我会出现在哪?', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z'], ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z']]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2018-1-4 13:52:25 | 显示全部楼层
冬雪雪冬 发表于 2018-1-4 10:16
问题出在c=[['z']*12]*8
这样每个['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z']都指向同 ...

c = [['z' for i in range(12)] for j in range(8)],
这段代码的含义是什么?不太懂。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 14:11:16 | 显示全部楼层
罗文成 发表于 2018-1-4 13:52
c = [['z' for i in range(12)] for j in range(8)],
这段代码的含义是什么?不太懂。。。

这是列表推导式,通过2层for循环形成2维列表。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-4 15:59:54 | 显示全部楼层
冬雪雪冬 发表于 2018-1-4 14:11
这是列表推导式,通过2层for循环形成2维列表。

哇,谢谢大神!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 18:49:04 From FishC Mobile | 显示全部楼层
能详细点么,我是小白。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-4 18:49:36 From FishC Mobile | 显示全部楼层
能详细点么,我是小白。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-20 13:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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