list = [[7 for i in range(5,8)] for i in range(4,7)]
print(list)
输出结果是
[[7, 7, 7], [7, 7, 7], [7, 7, 7]]
我看教程中for i in range(5,8)应该是由5,6,7依次赋值给i 但是为什么list最后会变成三行三列的7,能否请大佬给小白解释一下。谢谢!
从上面的图片中得出的结果就是和你上面一样,
从上面的图片中得出的结果就是你所说的5,6,7,
从而我们可以分析出,list是用[]表示的列表,第一个语句[7 for i in range(5,8)]表示子列表中生成3个数,三个数都为7,即生成了[7,7,7]这样的列表,然后将这个列表再次作为一个初始值,我们用list1 = [7,7,7]来表示;接下来就是第二个列表语句:[list1 for i in range(4,7)],如同第一个语句,同样生成三个数的列表,也就是最终结果:[[7,7,7],[7,7,7],[7,7,7]],其实那个range(5,8)和range(4,7)数字没有什么关系。
range(5,8)控制生成3个7
x=[a for in range(n)]
相当于x=[a]*n
所以是[7,7,7]
7 for x in range(6,8)的range是循环次数,for i in range(6,8)是循环内容
list = [[7 for i in range(5,8)] for i in range(4,7)]
粗心了,第一个7应该用变量 i 就对了
>>> [[i for i in range(5,8)] for i in range(4,7)]
[[5, 6, 7], [5, 6, 7], [5, 6, 7]]
首先7是个数值,相当于常量,for循环多少次就生成多少个7(这里是三次),列表里面嵌套了列表,内层的列表是[7, 7, 7],仍然相当于常量,后面再循环三次,结果就是你看到的那样咯。
要得到5,6,7,应该这么写:list = [i for i in range(5,8)]