python中的2D列表在每一行中写入,而不是一次
我在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
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)]