je voulais avoir s'il existait des structures en python similaires aux tableaux en C++ ou en Caml, c'est à dire des listes de taille constante prédéfinie mais qui pemettent une modification/un accès aux éléments peu coûteux.
Sinon un petit travail avec les listes si on veut éviter les surprises lors d'ajouts d'éléments
class EmptyListError(Exception):
pass
class AppendListError(Exception):
pass
class MyArray(list):
def __init__(self, max_length=None):
if not max_length:
raise EmptyListError("no possible empty list")
super().__init__()
self.max_length = max_length
def append(self, elem):
if len(self) >= self.max_length:
raise AppendListError("Size maximum is {}".format(self.max_length))
super().append(elem)
array = MyArray(max_length=5)
for i in range(5):
array.append(i)
print(array) # [0, 1, 2, 3, 4]
# array.append(5) # __main__.AppendListError: Size maximum is 5
array = MyArray() # __main__.EmptyListError: no possible empty list
en surchargeant la méthode append.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
je voulais avoir s'il existait des structures en python similaires aux tableaux en C++ ou en Caml, c'est à dire des listes de taille constante prédéfinie mais qui pemettent une modification/un accès aux éléments peu coûteux.
Comme indiqué par fred, la lecture et l'écriture des listes Python sont algorithmiquement efficaces et bien implémentées. Les listes Python ressemblent beaucoup aux vecteurs de la STL. A ma connaissance les listes fonctionnelles en Caml ne sont pas de taille prédéfinie (mais on peut faire du Caml non fonctionnel).
Les tableaux Numpy seront ce qui ressemble le plus à ce que tu évoques mais, sans opération de vectorisation, ils seront souvent moins efficaces que de simples listes Python. Typiquement, à ce que j'ai testé, implémenter un algo de graphe tel que l'algorithme de Floyd-Warshall est 9 fois plus lent avec des tableaux Numpy qu'avec des listes Python et 1,5 fois plus lent avec des array.
Sinon un petit travail avec les listes si on veut éviter les surprises lors d'ajouts d'éléments
class EmptyListError(Exception):
pass
class AppendListError(Exception):
pass
class MyArray(list):
def __init__(self, max_length=None):
if not max_length:
raise EmptyListError("no possible empty list")
super().__init__()
self.max_length = max_length
def append(self, elem):
if len(self) >= self.max_length:
raise AppendListError("Size maximum is {}".format(self.max_length))
super().append(elem)
array = MyArray(max_length=5)
for i in range(5):
array.append(i)
print(array) # [0, 1, 2, 3, 4]
# array.append(5) # __main__.AppendListError: Size maximum is 5
array = MyArray() # __main__.EmptyListError: no possible empty list
en surchargeant la méthode append.
Ok merci de l'info, je pensais que le coût était similaire à celui du Caml !
Oui je pensais à un truc du type array effectivement, mais finalement le type list de base me parait bien adapté
PascalOrtiz a écrit:
Ellister a écrit:
je voulais avoir s'il existait des structures en python similaires aux tableaux en C++ ou en Caml, c'est à dire des listes de taille constante prédéfinie mais qui pemettent une modification/un accès aux éléments peu coûteux.
Comme indiqué par fred, la lecture et l'écriture des listes Python sont algorithmiquement efficaces et bien implémentées. Les listes Python ressemblent beaucoup aux vecteurs de la STL. A ma connaissance les listes fonctionnelles en Caml ne sont pas de taille prédéfinie (mais on peut faire du Caml non fonctionnel).
Les tableaux Numpy seront ce qui ressemble le plus à ce que tu évoques mais, sans opération de vectorisation, ils seront souvent moins efficaces que de simples listes Python. Typiquement, à ce que j'ai testé, implémenter un algo de graphe tel que l'algorithme de Floyd-Warshall est 9 fois plus lent avec des tableaux Numpy qu'avec des listes Python et 1,5 fois plus lent avec des array.
Ah oui bon ben comme dit je vais garder les listes alors
Euh je sais pas trop je pensais aux array de caml, je me souviens plus trop, j'ai du faire un amalgame avec les listes C++.
Merci !
Tableaux
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Découverte Python Doc Tkinter Les chaînes de caractères