2011-06-25 5 views
6

Je convertis du code java en code python et j'ai fini par être déconcerté sur la façon de convertir un tableau 2D d'objets en Java en python.Tableau 2D d'objets en Python

code Java:

private Node nodes[][] = new Node[rows][columns]; 

Comment pourrais-je faire cela en python?

+0

Fondamentalement, une liste de listes. Mais il est * très * probable qu'il n'y ait aucune raison de commencer par initialiser la liste. Voyez si une compréhension de liste fonctionne dans votre cas, sinon écrivez-la en boucle avec 'nodes.append ([])' et 'nodes.extend' ou' nodes.append' dans une autre boucle. – delnan

Répondre

10

Je pense que c'est ce que vous voulez

nodes = [[Node() for j in range(cols)] for i in range(rows)] 

Mais ce n'est pas toujours une bonne pratique pour initialiser les listes. Pour les matrices, cela peut avoir du sens.

Si vous vous demandez: Documentation sur list comprehensions

Code de démonstration:

>>> 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]] 
+0

curieux si vous avez oublié un [] là-bas? – nobody

+0

@ personne non, pourquoi? – JBernardo

+0

Il semble drôle; J'aurais supposé qu'il aurait été quelque chose comme: nœuds = [[Node() pour j dans la gamme (cols)], [pour moi dans la gamme (lignes)]] – nobody