j'espère que ma question n'est pas trop triviale: "je débute".
Je cherche un exemple d'algorithme pour manipuler un arbre (je ne sais
pas quel type de données utiliser).
Mon objectif est de recueillir des données externes, les manipuler
(opérations sur chaines de caractères, tri, ...) pour ensuite écrire un
fichier XML.
J'avais fait ce genre de choses jadis en C, mais sans pointeur, je ne
sais pas comment le réaliser.
J'avais fait ce genre de choses jadis en C, mais sans pointeur, je ne sais pas comment le réaliser.
Tant mieux qu'il n'y en ait pas. :-)
Si tu as un besoin, regarde ce que t'offre la bibliothèque standard. Pas de secret, les modules qui ont besoin des pointeurs ou ont des contraintes de performances sont faits en C.
Tu peux toujours feinter avec des dictionnaires et des listes, mais l'algorithme risque d'être gros, difficile et les performances déplorables.
-- Hervé Cauwelier http://www.oursours.net/
J'avais fait ce genre de choses jadis en C, mais sans pointeur, je ne
sais pas comment le réaliser.
Tant mieux qu'il n'y en ait pas. :-)
Si tu as un besoin, regarde ce que t'offre la bibliothèque standard. Pas
de secret, les modules qui ont besoin des pointeurs ou ont des
contraintes de performances sont faits en C.
Tu peux toujours feinter avec des dictionnaires et des listes, mais
l'algorithme risque d'être gros, difficile et les performances déplorables.
J'avais fait ce genre de choses jadis en C, mais sans pointeur, je ne sais pas comment le réaliser.
Tant mieux qu'il n'y en ait pas. :-)
Si tu as un besoin, regarde ce que t'offre la bibliothèque standard. Pas de secret, les modules qui ont besoin des pointeurs ou ont des contraintes de performances sont faits en C.
Tu peux toujours feinter avec des dictionnaires et des listes, mais l'algorithme risque d'être gros, difficile et les performances déplorables.
-- Hervé Cauwelier http://www.oursours.net/
Jerome
Gael wrote:
Bonjour,
Bonjour
j'espère que ma question n'est pas trop triviale: "je débute".
Il faut bien commencer un jour
Je cherche un exemple d'algorithme pour manipuler un arbre (je ne sais pas quel type de données utiliser).
en python tu as le choix - structure récursive - structure itérative avec un tableau - arbre dom - ...
je peux te filer des exmples pour tout ce que je cite si tu veux
Mon objectif est de recueillir des données externes, les manipuler (opérations sur chaines de caractères, tri, ...) pour ensuite écrire un fichier XML.
Autant avoir une structure dom alors. Tu seras déjà dans le monde xml.
J'avais fait ce genre de choses jadis en C, mais sans pointeur, je ne sais pas comment le réaliser.
Tu as des pointeurs en python... Ca marche pareil.
def __repr__(self): s = str(self.cnt) + ' ' if self.l_son: s += str(self.l_son) if self.r_son: s += str(self.r_son) return s
a = BinTree() b = BinTree() c = BinTree()
a.l_son = b a.r_son = c a.cnt = 'root' b.cnt = 'fils_gauche' c.cnt = 'fils_droit'
print a
Merci d'avance.
Gael wrote:
Bonjour,
Bonjour
j'espère que ma question n'est pas trop triviale: "je débute".
Il faut bien commencer un jour
Je cherche un exemple d'algorithme pour manipuler un arbre (je ne sais
pas quel type de données utiliser).
en python tu as le choix
- structure récursive
- structure itérative avec un tableau
- arbre dom
- ...
je peux te filer des exmples pour tout ce que je cite si tu veux
Mon objectif est de recueillir des données externes, les manipuler
(opérations sur chaines de caractères, tri, ...) pour ensuite écrire un
fichier XML.
Autant avoir une structure dom alors. Tu seras déjà dans le monde xml.
J'avais fait ce genre de choses jadis en C, mais sans pointeur, je ne
sais pas comment le réaliser.
Tu as des pointeurs en python... Ca marche pareil.
j'espère que ma question n'est pas trop triviale: "je débute".
Il faut bien commencer un jour
Je cherche un exemple d'algorithme pour manipuler un arbre (je ne sais pas quel type de données utiliser).
en python tu as le choix - structure récursive - structure itérative avec un tableau - arbre dom - ...
je peux te filer des exmples pour tout ce que je cite si tu veux
Mon objectif est de recueillir des données externes, les manipuler (opérations sur chaines de caractères, tri, ...) pour ensuite écrire un fichier XML.
Autant avoir une structure dom alors. Tu seras déjà dans le monde xml.
J'avais fait ce genre de choses jadis en C, mais sans pointeur, je ne sais pas comment le réaliser.
Tu as des pointeurs en python... Ca marche pareil.
Je cherche un exemple d'algorithme pour manipuler un arbre (je ne sais pas quel type de données utiliser).
en python tu as le choix - structure récursive - structure itérative avec un tableau - arbre dom - ...
je peux te filer des exmples pour tout ce que je cite si tu veux
Oui, je suis preneur !
Tu as des pointeurs en python... Ca marche pareil.
Ha bon ... autant pour moi, je ne savais pas.
D'autant que ça ne marche pas exactement pareil en fait. En Python, il n'y a pas de pointeurs, il y a des références. Une "variable" Python est un nom associé à une référence à un objet. Un même objet peut être référencé par plusieurs noms. Si tu modifie l'association nom/objet (réassignation), ça n'aura d'incidence que sur ce nom (ie: dans l'espace de nommage dans lequel est défini le nom). Par contre, si tu modifie l'objet référencé par le nom, c'est bien l'objet lui-même que tu modifie. Ex:
a = [1, 2] b = a b.append(3) print a -> [1, 2, 3]
def modifie(uneListe): """ La modification modifie l'objet initialement référencé par le nom uneListe """ print "dans modifie - avant, uneListe = %s" % uneListe" uneListe.insert(0, "modifie") print "dans modifie - apres, uneListe = %s" % uneListe"
def reassigne(uneListe): """ La réassignation ne modifie pas l'objet initialement référencé par le nom uneListe, car ce nom est local à la fonction. """ print "dans reassigne - avant, uneListe = %s" % uneListe" uneListe = ['titi', 'toto', 'tata'] print "dans reassigne - apres, uneListe = %s" % uneListe"
modifie(a) print "apres modifie(a), a = %" % a
reassigne(a) print "apres reassigne(a), a = %" % a
print "et maintenant, b est devenu : " print b
Dans la pratique, on est bien dans une logique proche des pointeurs C, gestion manuelle de la mémoire et des types en moins.
Attention quand même: certains objets sont immutables (on ne peut pas les modifier une fois créés), par exemple les nombres, les chaines et les tuples. Ce qui veut dire qu'une fonction ne peut pas avoir d'effet de bords sur un objet d'un de ces types.
(snip code)
Je vais y réfléchir ... c'est une piste, mais le nombre fini de fils m'embête... Dans un arbre binaire, c'est assez logique de n'avoir que deux fils...
Mais bon:
class Tree(object): def __init__(self, cnt='', childrens=None): self.cnt = cnt if childrens is None: childrens = [] self.childrens = childrens
def __str__(self): s = ["+%s " % str(self.cnt)] for c in self.childrens: s.append("- %s" % str(c)) return "n".join(s)
Je te laisse le soin de réfléchir à une implémentation plus sérieuse...
Je cherche un exemple d'algorithme pour manipuler un arbre (je ne
sais pas quel type de données utiliser).
en python tu as le choix
- structure récursive
- structure itérative avec un tableau
- arbre dom
- ...
je peux te filer des exmples pour tout ce que je cite si tu veux
Oui, je suis preneur !
Tu as des pointeurs en python... Ca marche pareil.
Ha bon ... autant pour moi, je ne savais pas.
D'autant que ça ne marche pas exactement pareil en fait. En Python, il
n'y a pas de pointeurs, il y a des références. Une "variable" Python est
un nom associé à une référence à un objet. Un même objet peut être
référencé par plusieurs noms. Si tu modifie l'association nom/objet
(réassignation), ça n'aura d'incidence que sur ce nom (ie: dans l'espace
de nommage dans lequel est défini le nom). Par contre, si tu modifie
l'objet référencé par le nom, c'est bien l'objet lui-même que tu
modifie. Ex:
a = [1, 2]
b = a
b.append(3)
print a
-> [1, 2, 3]
def modifie(uneListe):
""" La modification modifie l'objet initialement
référencé par le nom uneListe
"""
print "dans modifie - avant, uneListe = %s" % uneListe"
uneListe.insert(0, "modifie")
print "dans modifie - apres, uneListe = %s" % uneListe"
def reassigne(uneListe):
""" La réassignation ne modifie pas l'objet initialement
référencé par le nom uneListe, car ce nom est local
à la fonction.
"""
print "dans reassigne - avant, uneListe = %s" % uneListe"
uneListe = ['titi', 'toto', 'tata']
print "dans reassigne - apres, uneListe = %s" % uneListe"
modifie(a)
print "apres modifie(a), a = %" % a
reassigne(a)
print "apres reassigne(a), a = %" % a
print "et maintenant, b est devenu : "
print b
Dans la pratique, on est bien dans une logique proche des pointeurs C,
gestion manuelle de la mémoire et des types en moins.
Attention quand même: certains objets sont immutables (on ne peut pas
les modifier une fois créés), par exemple les nombres, les chaines et
les tuples. Ce qui veut dire qu'une fonction ne peut pas avoir d'effet
de bords sur un objet d'un de ces types.
(snip code)
Je vais y réfléchir ... c'est une piste, mais le nombre fini de fils
m'embête...
Dans un arbre binaire, c'est assez logique de n'avoir que deux fils...
Mais bon:
class Tree(object):
def __init__(self, cnt='', childrens=None):
self.cnt = cnt
if childrens is None: childrens = []
self.childrens = childrens
def __str__(self):
s = ["+%s " % str(self.cnt)]
for c in self.childrens:
s.append("- %s" % str(c))
return "n".join(s)
Je cherche un exemple d'algorithme pour manipuler un arbre (je ne sais pas quel type de données utiliser).
en python tu as le choix - structure récursive - structure itérative avec un tableau - arbre dom - ...
je peux te filer des exmples pour tout ce que je cite si tu veux
Oui, je suis preneur !
Tu as des pointeurs en python... Ca marche pareil.
Ha bon ... autant pour moi, je ne savais pas.
D'autant que ça ne marche pas exactement pareil en fait. En Python, il n'y a pas de pointeurs, il y a des références. Une "variable" Python est un nom associé à une référence à un objet. Un même objet peut être référencé par plusieurs noms. Si tu modifie l'association nom/objet (réassignation), ça n'aura d'incidence que sur ce nom (ie: dans l'espace de nommage dans lequel est défini le nom). Par contre, si tu modifie l'objet référencé par le nom, c'est bien l'objet lui-même que tu modifie. Ex:
a = [1, 2] b = a b.append(3) print a -> [1, 2, 3]
def modifie(uneListe): """ La modification modifie l'objet initialement référencé par le nom uneListe """ print "dans modifie - avant, uneListe = %s" % uneListe" uneListe.insert(0, "modifie") print "dans modifie - apres, uneListe = %s" % uneListe"
def reassigne(uneListe): """ La réassignation ne modifie pas l'objet initialement référencé par le nom uneListe, car ce nom est local à la fonction. """ print "dans reassigne - avant, uneListe = %s" % uneListe" uneListe = ['titi', 'toto', 'tata'] print "dans reassigne - apres, uneListe = %s" % uneListe"
modifie(a) print "apres modifie(a), a = %" % a
reassigne(a) print "apres reassigne(a), a = %" % a
print "et maintenant, b est devenu : " print b
Dans la pratique, on est bien dans une logique proche des pointeurs C, gestion manuelle de la mémoire et des types en moins.
Attention quand même: certains objets sont immutables (on ne peut pas les modifier une fois créés), par exemple les nombres, les chaines et les tuples. Ce qui veut dire qu'une fonction ne peut pas avoir d'effet de bords sur un objet d'un de ces types.
(snip code)
Je vais y réfléchir ... c'est une piste, mais le nombre fini de fils m'embête... Dans un arbre binaire, c'est assez logique de n'avoir que deux fils...
Mais bon:
class Tree(object): def __init__(self, cnt='', childrens=None): self.cnt = cnt if childrens is None: childrens = [] self.childrens = childrens
def __str__(self): s = ["+%s " % str(self.cnt)] for c in self.childrens: s.append("- %s" % str(c)) return "n".join(s)
A tu vraiment besoin d'un arbre pour ça ? Qu'est-ce qui t'empêche de générer ton XML au fur et à mesure ? Je fais ça à longueur d'année pour générer des menus ou des plans de sites en HTML, et c'est assez trivial.
Ce que je veux manipuler c'est quelquechose comme ça (une structure
hiérarchique) : je ne crois pas pouvoir le faire avec des listes.
direction
|
---secretariat
|
sec_dir
|
---r&d
|
---recherche
|
A tu vraiment besoin d'un arbre pour ça ? Qu'est-ce qui t'empêche de
générer ton XML au fur et à mesure ? Je fais ça à longueur d'année pour
générer des menus ou des plans de sites en HTML, et c'est assez trivial.
A tu vraiment besoin d'un arbre pour ça ? Qu'est-ce qui t'empêche de générer ton XML au fur et à mesure ? Je fais ça à longueur d'année pour générer des menus ou des plans de sites en HTML, et c'est assez trivial.
Do Re Mi chel La Si Do
Bonsoir !
J'aime bien le terme "référence". Ça me plait, ce mot. Donc, à partir de dorénavant, sans tarder, ni plus attendre, je dirai : "Une 'variable' Python est un nom qui référence un objet".
@-salutations -- Michel Claveau
Bonsoir !
J'aime bien le terme "référence". Ça me plait, ce mot.
Donc, à partir de dorénavant, sans tarder, ni plus attendre, je dirai : "Une
'variable' Python est un nom qui référence un objet".
J'aime bien le terme "référence". Ça me plait, ce mot. Donc, à partir de dorénavant, sans tarder, ni plus attendre, je dirai : "Une 'variable' Python est un nom qui référence un objet".
@-salutations -- Michel Claveau
Gael
En fait, je lis les infos suivantes :
Dans une arborescence de fichiers ?
Non, plutôt dans un fichier plat (peu importe en fait).
A tu vraiment besoin d'un arbre pour ça ? Qu'est-ce qui t'empêche de générer ton XML au fur et à mesure ? Je fais ça à longueur d'année pour générer des menus ou des plans de sites en HTML, et c'est assez trivial.
Je ne doute pas que ce soit trivial ... n'empêche que je sais pas le faire. Je ne peux pas écrire au fur et à mesure, car je jeux trier chaque arborescence et sous arborescence par ordre alphabétique, en plus mon exemple est peut être mal choisi, mais si la derniere ligne lue est :
A tu vraiment besoin d'un arbre pour ça ? Qu'est-ce qui t'empêche de
générer ton XML au fur et à mesure ? Je fais ça à longueur d'année pour
générer des menus ou des plans de sites en HTML, et c'est assez trivial.
Je ne doute pas que ce soit trivial ... n'empêche que je sais pas le faire.
Je ne peux pas écrire au fur et à mesure, car je jeux trier chaque
arborescence et sous arborescence par ordre alphabétique, en plus mon
exemple est peut être mal choisi, mais si la derniere ligne lue est :
A tu vraiment besoin d'un arbre pour ça ? Qu'est-ce qui t'empêche de générer ton XML au fur et à mesure ? Je fais ça à longueur d'année pour générer des menus ou des plans de sites en HTML, et c'est assez trivial.
Je ne doute pas que ce soit trivial ... n'empêche que je sais pas le faire. Je ne peux pas écrire au fur et à mesure, car je jeux trier chaque arborescence et sous arborescence par ordre alphabétique, en plus mon exemple est peut être mal choisi, mais si la derniere ligne lue est :