Bonjour,
tout est dans la question ou presque. Lors de la "compilation" d'un script Python, quel type C est utilisé pour les listes ?
Je pose la question pour mieux comprendre les différences de performance entre maListe.pop() et maListe.pop(0).
Bonjour,
tout est dans la question ou presque. Lors de la "compilation" d'un script Python, quel type C est utilisé pour les listes ?
Je pose la question pour mieux comprendre les différences de performance entre maListe.pop() et maListe.pop(0).
Salut,
Une liste Python n'existe pas en C "standard", c'est un objet Python implémenté dans listobject.c.
En gros, les items de cette liste sont rangés dans un tableau (ob_item).
Si c'est le dernier élément, il suffit de redimensionner la capacité du tableau.
Lorsqu'il s'agit d'un autre élément, il faut "avancer" les éléments suivants: c'est cette opération qui va coûter.
- W
Il est conseillé d'utiliser collections.deque plutôt que List si on veut append/pop rapidement aux deux extrémités
Salut
A mon avis, le plus simple pour toi (qui a tant envie de comprendre) serait de refaire en C un ersatz de liste Python.
Et (désolé de contredire wiztricks qui est notre maitre à penser Python), au lieu de passer par un tableau je passerais par une liste chainée, un peu dans ce style...
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 typedef struct s_elem { void *pt_data; struct s_elem *next; } t_elem; typedef struct { t_elem *first; size_t nb_elem; } t_liste;
...ce qui simplifierait assez grandement les opérations append(), del() et pop()...
Tout à fait Sve@r, je suis d'accord avec toi, c'est un équivalent d'une deque.
Mais en fait ce que Wiztrick veut dire est qu'on utilise l'API C avec un tableau (**ob_item) et les dérivés à PyObject. La librairie utilisée est Python.h
Donc une lib C oui, mais qui sort du standard C habituel, voilà pourquoi la réponse est difficile à donner si tu ne te connais pas un minimum dans l'API C...
Si rambc a posé cette question, c'est sans doute parce que sa liste est de très grande taille.
Faire du FIFO sur une structure adaptée pour du LIFO n'est pas "top" et si son cas d'utilisation est FIFO, collections.deque sera mieux.
Comme il n'a pas indiqué ce qu'il faisait avec, ce mieux côté FIFO ne sera pas forcément bien (dans son contexte).
- W
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager