Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的2D列表在每一行中写入,而不是一次_Python_List_Multidimensional Array - Fatal编程技术网

python中的2D列表在每一行中写入,而不是一次

python中的2D列表在每一行中写入,而不是一次,python,list,multidimensional-array,Python,List,Multidimensional Array,我在Python中使用2D列表时遇到问题。我想在黑板中间写一个字。相反,我得到的字写在每一行的中间。有人能给我解释一下为什么会这样做,并给我一个解决方案吗 row = [] board = [] n = 21 longest = "WORD" for x in range(0, n): row.append('') for x in range(0, n): board.append(row) midway = len(board)/2 for x in range(0, le

我在Python中使用2D列表时遇到问题。我想在黑板中间写一个字。相反,我得到的字写在每一行的中间。有人能给我解释一下为什么会这样做,并给我一个解决方案吗

row = []
board = []
n = 21
longest =  "WORD"
for x in range(0, n):
    row.append('')
for x in range(0, n):
    board.append(row)
midway = len(board)/2
for x in range(0, len(board)):
    if x == midway:
        for y in range(0, len(board)):
            if y >= midway and y < midway + len(longest):
                board[midway][y] = longest[y - midway]
print board
行=[]
董事会=[]
n=21
longest=“WORD”
对于范围(0,n)内的x:
行。追加(“”)
对于范围(0,n)内的x:
board.append(第行)
中途=长(板)/2
对于范围内的x(0,透镜(板)):
如果x==中途:
对于范围(0,透镜(板))内的y:
如果y>=中段且y<中段+长度(最长):
董事会[中途岛][y]=最长[y-中途岛]
印制板

您重复使用
行构建
线路板的方式会导致每行出现更改。采用稍微不同的方法来构建电路板,您的代码应该按照预期工作

board = []
n = 21
longest =  "WORD"
for x in range(0, n):
    board.append([''] * n)
midway = len(board)/2
for y in range(0, len(board)):
    if y >= midway and y < midway + len(longest):
       board[midway][y] = longest[y - midway]
print board
board=[]
n=21
longest=“WORD”
对于范围(0,n)内的x:
董事会追加(['']*n)
中途=长(板)/2
对于范围(0,透镜(板))内的y:
如果y>=中段且y<中段+长度(最长):
董事会[中途岛][y]=最长[y-中途岛]
印制板

(您的外部循环是不必要的,因此它也被删除了。)

我认为这与您在第1行定义了
,然后将相同的
追加到
3次有关。因此,您没有3个不同的
s。您有3个对同一
行的引用。我认为这就是它所做的,我不认为这是你想要的。

原因是你附加了同一行来构造一个电路板,这段代码:

for x in range(0, n):
    row.append('')
for x in range(0, n):
    board.append(row)
您确实希望追加新行,但却始终向同一行添加引用。这意味着在内存中存储指向同一位置的n个引用,因此对其中一个进行更改,这将影响其他引用

您可以像这样快速创建一个电路板,这段代码也运行得更快

board = [['']*n for _ in range(n)]