首页 > 解决方案 > 这些列表之间有什么区别?

问题描述

在我的计算机科学入门课上,我们刚刚完成了一个创建井字游戏板的程序,而我制作游戏板的方式是这样的;

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

我在互联网上查看了类似的问题,并看到了另一种写法

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

我想知道如果写出来第二个与第一个相比会如何,它们是相同的还是看起来不同?

标签: pythonpython-3.x

解决方案


你可以问 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)

结果:

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

推荐阅读