List 更改循环python3的列表

List 更改循环python3的列表,list,for-loop,python-3.x,List,For Loop,Python 3.x,如您所见,列表将始终打印“ a1a2a3永远不会'0'在for循环中,这是为什么 但是如果你打印a1它是'0',但是[a1,a2,a3]是,我认为你误解了变量的含义 当您创建列表“boardspace”时,您正在使用a1等当时包含的值创建它。然后将变量a1等重新指定为不同的值 该列表不包含a1或任何其他变量,而是字符串列表。就这些 编辑: 假设你有这样的东西: a1 = ' ' a2 = ' ' a3 = ' ' b1 = ' ' b2 = ' ' b3 = ' ' c1

如您所见,列表将始终打印

a1
a2
a3
永远不会
'0'
在for循环中,这是为什么


但是如果你打印
a1
它是
'0'
,但是
[a1,a2,a3]
我认为你误解了变量的含义

当您创建列表“boardspace”时,您正在使用
a1
等当时包含的值创建它。然后将变量
a1
等重新指定为不同的值

该列表不包含
a1
或任何其他变量,而是字符串列表。就这些

编辑:

假设你有这样的东西:

a1 = '   '
a2 = '   '
a3 = '   '
b1 = '   '
b2 = '   '
b3 = '   '
c1 = '   '
c2 = '   '
c3 = '   '
boardspace = [[a1,a2,a3],[b1,b2,b3],[c1,c2,c3],[a1,b1,c1],[a2,b2,c2],[a3,b3,c3],[a1,b2,c3],[a3,b2,c1]]

while x != 'a'
    a1 = '0'
    a2 = '0'
    a3 = '0'
    for a in baordspace:
        if a[0]==a[1]==a[2]!= "  "
           x ='a'
如果希望对
a
的更改反映在
arr
中的两个子列表中,则需要执行以下两项操作之一:

  • 将这些变量转换为对象
  • arr
    中的索引存储到单独的列表中(没有那么好)
  • 两者都有原因,但由于您可能希望执行#1,下面是一个示例:

    a = 1
    b = 2
    arr = [[a, b], [b, a]]
    
    我用一些神奇的函数定义了一个类:

    • \uuuu初始化\uuuuu
      -构造函数
    • \uuuu str\uuuuu
      -
      str(obj)
      相当于
      obj.\uuuu str\uuuj()
    • \uuuu repr\uuuu
      -输出对象的表示。在本例中,我们只有一个值,因此
      val
      是一个足够的表示。它还使
      打印arr
      工作。有关更多信息,请参阅上一篇文章
    这里的变化是我们创建了一个对象。Python按值传递所有内容,因此当它将我们创建的对象传递给数组时,引用被复制,但底层对象是相同的


    这意味着对这些对象的任何更改都将按照您在问题中预期的方式进行。

    可能重复的请复制粘贴原始源代码,这一个有太多的打字错误该片段无助于理解完整的问题,打字错误是存在的,而循环可能永远不会开始。那么詹姆逊,你是说我必须做一个新的列表吗?这取决于你想做什么。最简单的方法是为每个变量创建对象。有关示例,请参见我的编辑。
    class Tile:
        def __init__(self, val):
            self.val = val
    
        def __repr__(self):
            return self.val
    
        def __str__(self):
            return self.val
    
    a = Tile('  ')
    b = Tile('  ')
    
    arr = [[a, b], [b, a]]
    
    print arr # [[  ,   ], [  ,   ]]
    
    a.val = '0'
    
    print arr # [[0,   ], [  , 0]]