我正在尝试编写一个函数,它将返回任何奇数的魔方,但不理解我得到的结果。 首先,整个列表被初始化,以便可以根据魔术方法算法覆盖列表对象,然后将范围中的每个数字写入列表中的某个位置。 print语句输出的值是有效的,但我的返回值不是。
def magicsquare(n):
magiclist, placeholders = [], [0]
for i in range(0, n-1):
placeholders.append(0)
for i in range(0, n):
magiclist.append(placeholders)
x, y, z = ((n-1)//2), (n-1), 1
print(x, y, z)
for i in range(1, (n*n)):
if i%n != 0:
magiclist[x][y] = z
x, y, z = (x+1)%n, (y+1)%n, z+1
print(x, y, z)
elif i%n == 0:
magiclist[x][y] = z
y, z = y-1, z+1
print(x, y, z)
return(magiclist)
magicsquare(3)返回:
1 2 1
2 0 2
0 1 3
0 0 4
1 1 5
2 2 6
2 1 7
0 2 8
1 0 9
出:[[4,7,8],[4,7,8],[4,7,8]]
对于打印的每3个数字,前两个是二维列表位置,第三个是要插入到该位置的列表中的数字,但无论我如何配置我的循环,该函数都会返回这些重复列表。
非常感谢任何帮助。对不起,我不擅长发一个好问题。
答案 0 :(得分:1)
列表中的所有列表都是相同的列表。您需要每次制作副本或制作每个列表。与:比较:
magiclist = []
for i in range(0, n):
placeholders = [0]
for i in range(0, n-1):
placeholders.append(0)
magiclist.append(placeholders)
这是更长的写作方式:
magiclist = [[0 for i in range(0, n-1)] for i in range(0, n)]