为列表中的列表分配值

时间:2017-06-11 17:23:57

标签: list python-3.x

我在尝试将单个值分配到列表中的列表时遇到问题

示例:

创建一个包含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'当我只选择第一个时,每个列表中的第一个值。

感谢您对所有人发表评论!

2 个答案:

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