我在尝试将单个值分配到列表中的列表时遇到问题
示例:
创建一个包含11个11个字符串列表的列表 板= [[''] (10 + 1)] (10 + 1)
板 [['。','。','。','。','。&#39 ;,'。','。','。','。','。&#39 ;,'。'],['。','。','。','。& #39;,'。','。','。','。','。& #39;,'。','。'],['。','。',' 。','。','。','。','。',' 。','。','。','。'],['。',&# 39;。','。','。','。','。',&# 39;。','。','。','。','。'],[ '。','。','。','。','。', '。','。','。','。','。', '。'],['。','。','。','。&#39 ;,'。','。','。','。','。&#39 ;,'。','。'],['。','。','。& #39;,'。','。','。','。','。& #39;,'。','。' ,'。'],['。','。','。','。&# 39;,'。','。','。','。','。&# 39;,'。','。'],['。','。','。 ','。','。','。','。','。 ','。','。','。'],['。',&#39 ;。','。','。','。','。',&#39 ;。','。','。','。','。'],[& #39;。','。','。','。','。',& #39;。','。','。','。','。',& #39;']]
分配价值' O'到第一个列表的第一个字符串
板[0] [0] =' O'
我要关注输出
板 [[' O','。','。','。','。' ,'。','。','。','。','。' ,'],[' O','。','。','。' ;,'。','。','。','。','。&#39 ;,'。','。'],[' O','。','。&# 39;,'。','。','。','。','。&# 39;,'。','。','。'],[' O','。& #39;,'。','。','。','。','。& #39;,'。','。','。','。'],[' O','。','。','。','。','。 ','。','。','。','。','。 '],[' O','。','。','。',' 。','。','。','。','。',' 。','。'],[' O','。','。',&#39 ;。','。','。','。','。',&#39 ;。','。' ,'],[' O','。','。','。' ;,'。','。','。','。','。&#39 ;,'。','。'],[' O','。','。&# 39;,'。','。','。','。','。&# 39;,'。','。','。'],[' O','。& #39;,'。','。','。','。','。& #39;,'。','。','。','。'],[' O','。','。','。','。','。 ','。','。','。','。','。 ']]
相反,我应该得到这个我没有得到的其他输出:
[[' O','。','。','。','。& #39;,'。','。','。','。','。& #39;,'。'],['。','。','。',' 。','。','。','。','。',' 。','。','。'],['。','。',&# 39;。','。','。','。','。',&# 39;。','。','。','。'],['。', '。','。','。','。','。', '。','。','。','。','。'] ,['。','。','。','。','。&#39 ;,'。','。','。','。','。&#39 ;,'。'],['。','。','。','。& #39;,'。','。','。','。','。& #39;,'。','。'],['。','。',' 。','。','。','。','。',' 。','。','。&# 39;,'。'],['。','。','。','。 ','。','。','。','。','。 ','。','。'],['。','。',&#39 ;。','。','。','。','。',&#39 ;。','。','。','。'],['。',& #39;。','。','。','。','。',& #39;。','。','。','。','。'], ['。','。','。','。','。' ,'。','。','。','。','。' ,'。']]
那就是它。我希望得到字符串' O'仅限于第一个listv的第一个元素!
我不明白为什么我会获得价值' O'当我只选择第一个时,每个列表中的第一个值。
感谢您对所有人发表评论!
答案 0 :(得分:1)
你可以试试这个:
board = [["." for i in range(11)] for b in range(11)]
board[0][0] = "O"
那会给你单身" O"在第一个列表的第0个索引处。
答案 1 :(得分:1)
在您的代码中,这一行:
>>> board = [['.']*(10+1)]*(10+1)
似乎创建了一个包含独立单元格行的2D网格,但它并没有那么做,这是在Python中创建n维列表时遇到的常见问题。
此代码的作用是创建一个行,然后该板是一个列表,其中列表中的每个项引用同一行。
您可以使用id()
:
>>> id(board[0])
4497981128
>>> id(board[1])
4497981128
>>> id(board[2])
4497981128
>>> id(board[0]) == id(board[1]) == id(board[2])
True
所有三个内存地址都是相同的,因此将索引i中的元素更改为一个,将其更改为所有内容。
您要做的是分别生成每一行:
>>> board = [['.']*(10+1) for _ in range(10+1)]
(_
是必需但未使用的变量的约定。)
这样每行都是内存中的一个独立对象:
>>> id(board[0]) == id(board[1]) == id(board[2])
False
>>> id(board[0])
4497941384
>>> id(board[1])
4497989256
>>> id(board[2])
4497919688