604858912 发表于 2020-10-25 23:11:58

列表嵌套的一个问题

本帖最后由 604858912 于 2020-10-25 23:13 编辑

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

import random

laoshi = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'i', 'j', 'k']
fangjian = [[], [], []]
for i in laoshi:
    a = random.choice(fangjian)
    a.append(i)
print(fangjian)

笨鸟学飞 发表于 2020-10-25 23:11:59

import random

laoshi = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'i', 'j', 'k']
fangjian = [[], [], []]            #二维列表
for i in laoshi:
    a = random.choice(fangjian)       #在循环内,则每次a都是从fangjian这个二维列表中选择一个子列表
    a.append(i)
print(fangjian)         #打印fangjian是打印整个二维列表,打印a则是循环最后一次随机选择的子列表

昨非 发表于 2020-10-25 23:16:55

laoshi = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'i', 'j', 'k']
fangjian = [[], [], []]
for i in laoshi:
    a = random.choice(fangjian)
    a.append(i)
    print(a)
print(fangjian)

a是for循环内的局部变量,只有在for循环内才能打印

kogawananari 发表于 2020-10-26 00:00:35

昨非 发表于 2020-10-25 23:16
a是for循环内的局部变量,只有在for循环内才能打印

我有异议
知乎搜的:Python中的for循环并没有引入作用域(scope)的概念
但是java有{:10_253:}
但是重新赋值就没办法了

昨非 发表于 2020-10-26 00:02:01

kogawananari 发表于 2020-10-26 00:00
我有异议
知乎搜的:Python中的for循环并没有引入作用域(scope)的概念
但是java有

啊,是吗?
楼主说外面会出问题,我没有测试的,,
以实践为准哈{:10_260:}

majian890324 发表于 2020-10-26 08:36:37

我试了一下
import random

laoshi = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'i', 'j', 'k']
fangjian = [[], [], []]
for i in laoshi:
    a = random.choice(fangjian)
    print(type(a))
    a.append(i)
print(a)
因为fangjian是一个二维列表,所以随机给a的是一个fangjian里的子列表,a在进行添加元素的时候是往字列表里增加元素。

sunrise085 发表于 2020-10-26 10:05:34

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

import random
laoshi = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'i', 'j', 'k']
fangjian = [[], [], []]
for i in laoshi:
    a = random.choice(fangjian)
    a.append(i)
print("fanjian:",fangjian)
print("a:",a)
下面是多次运行的结果,每次都不一样,但 a 中一定有 'k'
fanjian: [['B', 'E', 'i', 'j'], ['C', 'D'], ['A', 'F', 'G', 'k']]
a: ['A', 'F', 'G', 'k']
fanjian: [['B', 'E', 'G', 'k'], ['C', 'D', 'j'], ['A', 'F', 'i']]
a: ['B', 'E', 'G', 'k']

fanjian: [['A', 'D', 'E', 'F', 'k'], ['G', 'i', 'j'], ['B', 'C']]
a: ['A', 'D', 'E', 'F', 'k']

fanjian: [['A', 'B', 'D', 'F', 'j'], ['C', 'i', 'k'], ['E', 'G']]
a: ['C', 'i', 'k']
注意:请不要再拿这么点东西悬赏了,你的悬赏,还不如不悬赏呢。不悬赏的话,拿到最佳,系统奖励都比你的悬赏多很多呢。


604858912 发表于 2020-10-26 12:57:42

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

我说的不正常是不符合我的要求啊- -。。
页: [1]
查看完整版本: 列表嵌套的一个问题