如何更改列表中的元素?

时间:2019-06-26 22:54:15

标签: python

我正在尝试制作一个5x5的网格,将播放器放置在一个随机的位置。

def board():
    grid0 = []
    grid1 = []
    a = 0
    b = 0
    while a < 5:
        grid0.append("0")
        a += 1
    while b < 5:
        grid1.append(grid0)
        b += 1
    x = list(grid1)
    x[0][0] = "x"
    for row in grid1:
        print(row)

我希望结果看起来像这样:

['X', '0', '0', '0', '0']
['0', '0', '0', '0', '0']
['0', '0', '0', '0', '0']
['0', '0', '0', '0', '0']
['0', '0', '0', '0', '0']

但是我得到了:

['x', '0', '0', '0', '0']
['x', '0', '0', '0', '0']
['x', '0', '0', '0', '0']
['x', '0', '0', '0', '0']

4 个答案:

答案 0 :(得分:0)

如果您希望将'0'放在一个随机位置的'x'的5x5网格中,则可以执行以下操作:

from random import randint


grid = [['0' for x in xrange(5)] for y in xrange(5)]
grid[randint(0,4)][randint(0,4)] = 'x'

答案 1 :(得分:0)

这是具有相同可变列表的多个引用的经典python gotchya。您要创建取消排队列表:

from pprint import pprint

x = []
for _ in range(5):
    x.append(['0']*5)

x[0][0] = 'x'

pprint(x)

给出输出:

[['x', '0', '0', '0', '0'],
 ['0', '0', '0', '0', '0'],
 ['0', '0', '0', '0', '0'],
 ['0', '0', '0', '0', '0'],
 ['0', '0', '0', '0', '0']]

答案 2 :(得分:0)

原因是构建网格的方式。您的列表“ x”列表是对“ grid0”的5个引用的列表。当通过调用x [0] [0] ='x'覆盖列表'x'的zeroeth元素的zeroeth元素时,您将覆盖'grid0'的zeroeth元素,后者代表'grid1'和因此在您的清单“ x”中。 您将需要找到另一种构建网格的方法,并研究如何对单个实例进行整理(例如,通过使用copy())

答案 3 :(得分:0)

代码的问题在于,您要将相同的grid0副本附加到grid1列表中。这意味着您对grid1 [0]中的grid0所做的任何更改都会影响您的grid0 [1:4](因为它们都是相同的grid0)。

您可以通过将grid0的副本附加到grid1来轻松解决此问题:

    while b < 5:
        grid1.append(grid0.copy())
        b += 1