What does this line of code do when initializing a hash table in python?
本问题已经有最佳答案,请猛点这里访问。
我正在研究如何在python中创建哈希表的解决方案,并遇到了这个函数:
1 2 3 | def __init__(self, size): self.size = size self.table = [[] for _ in range(self.size)] |
创建多维数组的第三行代码让我困惑。主要是这部分:
1 | for _ in range(self.size) |
号
这到底在做什么?为什么需要这样做而不只是这样做:
1 | [[] self.size] |
哪个可以创建一个大小为self.size的二维数组?任何一种视觉辅助手段都会有帮助。
这条线
1 | self.table = [[] for _ in range(self.size)] |
创建存储哈希表内容的存储桶数组。
变量名
您建议初始化如下内容:
1 | self.table = [[]]*self.size |
号
但这是一个坏主意,因为你实际上得到了同一份清单的
1 2 3 4 | a=[[]]*4 >>> [[], [], [], []] a[0].append(3) >>> [[3], [3], [3], [3]] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | >>> good_table = [[] for _ in range(5)] >>> good_table [[], [], [], [], []] >>> good_table[0].append(3) >>> good_table [[3], [], [], [], []] >>> suggested_table = [[] 5] File"<input>", line 1 suggested_table = [[] 5] ^ SyntaxError: invalid syntax >>> suggested_table = [[] * 5] >>> suggested_table [[]] >>> [] * 5 [] >>> bad_table = [[]] * 5 >>> bad_table [[], [], [], [], []] >>> bad_table[0].append(3) >>> bad_table [[3], [3], [3], [3], [3]] |
。
对于最后一部分,请参见意外地在子列表中反映的列表更改列表。