Comment puis-je mettre en œuvre un arbre en Python? Sont-il intégré dans les structures de données en Python comme dans Java?
Je suis en train de construire un général de l'arbre. Sont-il intégré dans les structures de données en Python pour mettre en œuvre un arbre?
- laurentluce.com/posts/binary-search-tree-library-in-python bonne explication .... .
Vous devez vous connecter pour publier un commentaire.
anytree
Je recommande https://pypi.python.org/pypi/anytree (je suis l'auteur)
Exemple
Caractéristiques
anytree a aussi une puissante API avec:
anytree
est probablement une grande bibliothèque, c'est un python question, pas une Node.js question.dan = Node("Dan", parent=udo, attributes={salary='$2500', age=25, sex='M'})
; et être en mesure de récupérer ces attributs. Pourriez-vous indiquer comment faire?Python qui n'ont pas tout à fait de la vaste gamme de "built-in" structures de données comme Java. Cependant, parce que Python est dynamique, un arbre est facile à créer. Par exemple, un arbre binaire peut être:
Vous pouvez l'utiliser comme ceci:
class Tree
de l'objet puisobject
est parfois juste une ligne directrice: Si une classe hérite d'aucune autre classe de base, explicitement hérite de l'objet. Ceci s'applique également aux classes imbriquées. Voir Google Python Guide de StyleGénérique de l'arbre est un nœud avec zéro, un ou plusieurs enfants, à chacun une bonne (arbre) nœud. Ce n'est pas le même qu'un arbre binaire, ils sont différents des structures de données, bien que les deux actions de certains termes.
Il n'est pas tout builtin structure de données générique des arbres en Python, mais c'est facile à mettre en place des classes.
Vous pouvez essayer:
Comme suggéré ici: https://gist.github.com/2012250
Il n'y a pas d'arbres, construit dans, mais vous pouvez facilement construire un par sous-classement d'un type de Nœud de la Liste et de l'écriture de la traversée de méthodes. Si vous faites cela, j'ai trouvé traversent, utile.
Il y a aussi de nombreuses implémentations sur PyPi que vous pouvez parcourir.
Si je me souviens bien, le Python standard lib ne comprend pas l'arbre structures de données pour la même raison que l' .NET de la classe de base de la bibliothèque n'a pas d': lieu de mémoire est réduite, résultant en plus de défauts de cache. Sur les processeurs modernes, il est généralement plus rapide de simplement apporter une grande partie de la mémoire dans le cache, et "pointeur riches" des structures de données annuler la prestation.
J'ai mis en place un enracinée arbre comme d'un dictionnaire
{child:parent}
. Ainsi, par exemple, avec le nœud racine0
, un arbre pourrait ressembler à ça:Cette structure fait qu'il est assez facile d'aller vers le haut le long d'un chemin d'accès à partir de n'importe quel nœud de la racine, ce qui est pertinent pour le problème que j'ai été travailler sur.
{parent:[leftchild,rightchild]}
.Greg Hewgill la réponse est grand, mais si vous avez besoin de plus de nœuds par niveau, vous pouvez utiliser une liste ou un dictionnaire pour les créer: Et puis utilisez la méthode pour y accéder, soit par son nom ou de l'ordre (comme id)
Maintenant, il suffit de créer une racine et de le construire:
ex:
Qui devrait être assez pour vous de commencer à trouver comment faire ce travail
fonctionne comme un dictionnaire, mais donne autant de imbriquée dicts vous le souhaitez.
Essayez ce qui suit:
de livrer un imbriquée dict ... qui fonctionne comme un arbre, en effet.
... Si vous avez déjà un dict, il jetait chaque niveau de l'arbre:
De cette façon, vous pouvez conserver modifier/ajouter/supprimer chaque dict niveau que vous souhaitez.
Tous les dict méthodes pour la traversée etc, continuent de s'appliquer.
dict
au lieu dedefaultdict
? De mes tests, l'extension dedefaultdict
au lieu de dict, puis en ajoutantself.default_factory = type(self)
vers le haut de init devraient fonctionner de la même manière.J'ai mis en place des arbres à l'aide imbriquée dicts. Il est assez facile à faire, et cela a fonctionné pour moi avec assez de grands ensembles de données. J'ai posté un exemple ci-dessous, et vous pouvez voir plus à Google code
J'ai publié un Python [3] de l'arbre de la mise en œuvre sur mon site: http://www.quesucede.com/page/show/id/python_3_tree_implementation.
Espère que c'est de l'utilisation,
Ok, voici le code:
Si quelqu'un a besoin d'un moyen plus simple de le faire, un arbre n'est qu'une manière récursive liste imbriquée (depuis le set n'est pas hashable) :
Où chaque branche est une paire de: [ objet, [les enfants] ]
et chaque feuille est une paire de: [ objet, [] ]
Mais si vous avez besoin d'une classe avec des méthodes, vous pouvez utiliser anytree.
Quelles activités avez-vous besoin? Il est souvent une bonne solution en Python à l'aide d'un dictionnaire ou une liste avec les traversent, module.
Il y a beaucoup, beaucoup d'arbre implémentations sur PyPI, et de nombreux types d'arbres sont presque trivial à mettre en œuvre vous-même dans le plus pur Python. Toutefois, cela est rarement nécessaire.
Un autre arbre de la mise en œuvre vaguement basé sur La réponse de Bruno:
Et un exemple de comment l'utiliser:
Qui devrait de sortie:
Si vous souhaitez créer une structure d'arbre de données puis d'abord, vous devez créer la treeElement objet. Si vous créez le treeElement objet, alors vous pouvez décider comment votre arbre se comporte.
Pour ce faire est la suivante TreeElement classe:
Maintenant, nous devons utiliser cet élément pour la création de l'arbre, je suis à l'aide d'Un* l'arbre dans cet exemple.
Vous pouvez ajouter/supprimer des éléments à partir de l'objet, mais la structure intect.