列出索引问题

时间:2017-03-25 21:19:11

标签: python python-3.x

我正在尝试编写一个函数,它将返回任何奇数的魔方,但不理解我得到的结果。 首先,整个列表被初始化,以便可以根据魔术方法算法覆盖列表对象,然后将范围中的每个数字写入列表中的某个位置。 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个数字,前两个是二维列表位置,第三个是要插入到该位置的列表中的数字,但无论我如何配置我的循环,该函数都会返回这些重复列表。

非常感谢任何帮助。对不起,我不擅长发一个好问题。

1 个答案:

答案 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)]