关于某个代码位置 放置的问题

原问题是 编写一个程序,输入数字x,数字y,生成一个二维数组。数组的第i行和第j列中的元素值应该是i*j。 注意:i= 0,1 .,X - 1;    j = 0, 1,Y-1。假设输入的x=3,输入的y=5,则输出为: [[0,0,0,0,0],[0,1,2,3,4],[0,2,4,6,8]].
网上看到的代码

x=int(input('x '))
y=int(input('y '))
list=[]
for i in range(x):
    fi=[]#稍微有些不理解
    for j in range(y):
        fi.append(i*j)
    list.append(fi)
print(list)

就是不知道为什么fi=[]要放在for i in range:的后面,为什么不能放在for j in range:的后面

如果你把fi=[ ]放在for j in range (y)后面的话,会一直执行fi=[ ],那么他每次都要变空,最后到后面list.append(fi)的时候就只有最后一个数字而不是完整的了。