I think you want
nodes = [[Node() for j in range(cols)] for i in range(rows)]
But it is not always good practice to initialize lists. For matrices, this may make sense.
If you are interested: List comprehension documentation
Demo code:
>>> class Node: def __repr__(self): return "Node: %s" % id(self) >>> cols = 3 >>> rows = 4 >>> nodes = [[Node() for j in range(cols)] for i in range(rows)] >>> from pprint import pprint >>> pprint(nodes) [[Node: 41596976, Node: 41597048, Node: 41596904], [Node: 41597120, Node: 41597192, Node: 41597336], [Node: 41597552, Node: 41597624, Node: 41597696], [Node: 41597768, Node: 41597840, Node: 41597912]]
source share