鱼C论坛

 找回密码
 立即注册
查看: 2745|回复: 7

[已解决]列表嵌套的一个问题

[复制链接]
发表于 2020-10-25 23:11:58 | 显示全部楼层 |阅读模式
2鱼币
本帖最后由 604858912 于 2020-10-25 23:13 编辑

额,大问题没有,就是这里为什么打印的时候要打印fangjian,打印a就不正常呢? 这里不是a=了吗? 这个不是赋值动作吗?求大神解答解答

  1. import random

  2. laoshi = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'i', 'j', 'k']
  3. fangjian = [[], [], []]
  4. for i in laoshi:
  5.     a = random.choice(fangjian)
  6.     a.append(i)
  7. print(fangjian)
复制代码
最佳答案
2020-10-25 23:11:59
  1. import random

  2. laoshi = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'i', 'j', 'k']
  3. fangjian = [[], [], []]            #二维列表
  4. for i in laoshi:
  5.     a = random.choice(fangjian)       #在循环内,则每次a都是从fangjian这个二维列表中选择一个子列表
  6.     a.append(i)
  7. print(fangjian)         #打印fangjian是打印整个二维列表,打印a则是循环最后一次随机选择的子列表
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-25 23:11:59 | 显示全部楼层    本楼为最佳答案   
  1. import random

  2. laoshi = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'i', 'j', 'k']
  3. fangjian = [[], [], []]            #二维列表
  4. for i in laoshi:
  5.     a = random.choice(fangjian)       #在循环内,则每次a都是从fangjian这个二维列表中选择一个子列表
  6.     a.append(i)
  7. print(fangjian)         #打印fangjian是打印整个二维列表,打印a则是循环最后一次随机选择的子列表
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-25 23:16:55 | 显示全部楼层
  1. laoshi = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'i', 'j', 'k']
  2. fangjian = [[], [], []]
  3. for i in laoshi:
  4.     a = random.choice(fangjian)
  5.     a.append(i)
  6.     print(a)
  7. print(fangjian)
复制代码


a是for循环内的局部变量,只有在for循环内才能打印
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-26 00:00:35 | 显示全部楼层
昨非 发表于 2020-10-25 23:16
a是for循环内的局部变量,只有在for循环内才能打印


我有异议
知乎搜的:Python中的for循环并没有引入作用域(scope)的概念
但是java有
但是重新赋值就没办法了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-26 00:02:01 From FishC Mobile | 显示全部楼层
kogawananari 发表于 2020-10-26 00:00
我有异议
知乎搜的:Python中的for循环并没有引入作用域(scope)的概念
但是java有

啊,是吗?
楼主说外面会出问题,我没有测试的,,
以实践为准哈
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-26 08:36:37 | 显示全部楼层
我试了一下
  1. import random

  2. laoshi = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'i', 'j', 'k']
  3. fangjian = [[], [], []]
  4. for i in laoshi:
  5.     a = random.choice(fangjian)
  6.     print(type(a))
  7.     a.append(i)
  8. print(a)
复制代码

因为fangjian是一个二维列表,所以随机给a的是一个fangjian里的子列表,a在进行添加元素的时候是往字列表里增加元素。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-26 10:05:34 | 显示全部楼层
打印 a 怎么,不正常了?
是不是你的理解问题?
a 在循环中随机指向 fanjian 中的一个子列表,那么在 for 循环结束后, a 具体指向那个子列表不固定,fanjian 中的三个子列表的内容也是随机的。这样在 fo r循环之后,打印 a ,每次运行输出结果 都可能是不一样的。但一定是 fanjian 列表中的某一个子列表,而且一定包含 'k' ,因为这是for循环的最后一次循环,也是 a 的最后一次赋值
在你的程序末尾添加一句,print(a) ,多运行几次,看看结果

  1. import random
  2. laoshi = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'i', 'j', 'k']
  3. fangjian = [[], [], []]
  4. for i in laoshi:
  5.     a = random.choice(fangjian)
  6.     a.append(i)
  7. print("fanjian:",fangjian)
  8. print("a:",a)
复制代码

下面是多次运行的结果,每次都不一样,但 a 中一定有 'k'
  1. fanjian: [['B', 'E', 'i', 'j'], ['C', 'D'], ['A', 'F', 'G', 'k']]
  2. a: ['A', 'F', 'G', 'k']
复制代码
  1. fanjian: [['B', 'E', 'G', 'k'], ['C', 'D', 'j'], ['A', 'F', 'i']]
  2. a: ['B', 'E', 'G', 'k']
复制代码
  1. fanjian: [['A', 'D', 'E', 'F', 'k'], ['G', 'i', 'j'], ['B', 'C']]
  2. a: ['A', 'D', 'E', 'F', 'k']
复制代码
  1. fanjian: [['A', 'B', 'D', 'F', 'j'], ['C', 'i', 'k'], ['E', 'G']]
  2. a: ['C', 'i', 'k']
复制代码

注意:请不要再拿这么点东西悬赏了,你的悬赏,还不如不悬赏呢。不悬赏的话,拿到最佳,系统奖励都比你的悬赏多很多呢。


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-26 12:57:42 | 显示全部楼层
sunrise085 发表于 2020-10-26 10:05
打印 a 怎么,不正常了?
是不是你的理解问题?
a 在循环中随机指向 fanjian 中的一个子列表,那么在 for  ...

我说的不正常是不符合我的要求啊- -。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-28 17:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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