这些列表之间有什么区别?

时间:2019-11-28 03:29:30

标签: python python-3.x

在我的计算机入门课程中,我们刚刚编写了一个程序来创建井字游戏板,而我制作游戏板的方式就是这样;

game_board = [[', ', '], [', ', '],[', ', ']]

我在互联网上看到了类似的问题,并看到了这样写的另一种方式

different_board = [[' '] * 3 for row in range(3)]

我想知道如果将第二个书写的内容与第一个相比较,它们看起来是一样的还是看起来会有所不同?

1 个答案:

答案 0 :(得分:2)

您可以问Python:

a = [[' ', ' ', ' '], [' ', ' ', ' '], [' ', ' ', ' ']]
b = [[' '] * 3 for row in range(3)]
print(a == b)

结果:

True

还请注意:

c = c = [[' '] * 3] * 3
d = [[' ' for _ in range(3)] for _ in range(3)]
print(a == c)
print(a == d)

它们看起来一样,但它们只是相似-尝试修改c,您会看到原因:

c[0][1] = 'x'
print(c)

结果:

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

这是对同一列表的三个引用! d的定义是正确的,但是对于大多数程序员来说,* 3为何有这个问题而for _ in range(3)却没有这个问题,因此尚不清楚,因此,我将远离这些“有效”的定义。

您会看到自己的样子:

print(b)

结果:

[[' ', ' ', ' '], [' ', ' ', ' '], [' ', ' ', ' ']]