python - 这些列表之间有什么区别?
问题描述
在我的计算机科学入门课上,我们刚刚完成了一个创建井字游戏板的程序,而我制作游戏板的方式是这样的;
game_board = [[', ', '], [', ', '],[', ', ']]
我在互联网上查看了类似的问题,并看到了另一种写法
different_board = [[' '] * 3 for row in range(3)]
我想知道如果写出来第二个与第一个相比会如何,它们是相同的还是看起来不同?
解决方案
你可以问 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)
结果:
[[' ', ' ', ' '], [' ', ' ', ' '], [' ', ' ', ' ']]
推荐阅读
- multithreading - std::promise 左值引用与右值引用之间的区别
- php - 如何在雄辩的 orm 中结合 sum() where 和 group by 语句?
- c# - 处理由反序列化空值引起的错误
- c# - 如何使用滑块在我的 C# 代码的后端设置值
- c# - WPF DataGrid 阻止排序视图的自动重新排序
- asp.net-mvc - 使用 Visual Studio 时,Sqlite 数据库 app.db 不存在
- java - 将某些 Flink 操作优先于其他操作
- php - PHP urlencode functions
- javascript - 在按钮的 onclick 属性中传递 php 数组并在 javascript 中读取它
- shell - Shell 脚本 - [: -lt: 应为一元运算符