CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Python] optimiser parcours dictionnaire

Lagrangien
Lagrangien
Niveau 8
02 avril 2013 à 22:55:25

Salut,

J'ai une classe d'objets qui exige un traitement des données pas trop lent. Dans ma classe, j'ai un dictionnaire qui couple des clés, toutes des chaines de caractèrse, à des objets, tous de la même classe.

Question 1) : Est-ce censé de faire ce genre de dico, dont les couples sont toujours de mêmey types ? Suis-je passé à côté d'un objet fait exprès pour ça ?

Question 2) : pour parcourir les valeurs du dictionnaire, si je fais : for i in dico.values(), est-ce que dico.values() est lent a être exécuté ? Ne ferais-je pas mieux de déclarer dico.values() comme un attribut de la classe à mettre à jour le cas échéant (fameux dilemne mémoire-vitesse)? Est-ce que je ferai mieux de déclarer deux listes dans ma classe au lieu d'un dictionnaire, càd une liste pour les clés et une liset pour les valeurs ?

Merci

godrik
godrik
Niveau 30
02 avril 2013 à 23:01:44

On parle de combien d'objet et de quel budget de temps?

Lagrangien
Lagrangien
Niveau 8
02 avril 2013 à 23:13:20

les dictionnaires sont là pour identifier des objets "boutons" dans un menu. Donc en gros, on aurait au max une vingtaine de boutons par menus.

Le budget de temps je pourrais pas donner une valeur en microsecondes, je sais pas... Pas besoin que ce soit ultra rapide, il faut juste que ce ne soit "pas lent".

godrik
godrik
Niveau 30
02 avril 2013 à 23:14:18

Tu constates une lenteur quelconque dans ton application?

Lagrangien
Lagrangien
Niveau 8
02 avril 2013 à 23:30:28

Non, mais pour l'instant les menus sont épurés. Lorsque je ferais tourner du son, puis des animations derrière, etc, etc, si ca tourne lentement je ne veux pas avoir à remettre les mains dans le cambouis concernant mon menu.

Mais un dictionnaire en python est un objet, j'imagine, et si tel est le cas, cet objet possède-t-il un attribut "values" ? J'imagine que non vu qu'il faut faire appel à la méthode values(). Et donc l'ordi se retape toute la construction de la liste qu'il me renvoie (je suis en python < 3) quand bien même les valeurs du dico n'ont pas changé. Et ça m'énerve^^

godrik
godrik
Niveau 30
03 avril 2013 à 00:27:46

perso je ne connais rien a python, mais il y a certainement une maniere efficace de traverser un dictionnaire.

De facon general, utilise la facon "efficace" recommander par ton langage/library et ne te pose pas plus de question que ca pour commencer. Si tu arrives a un point ou ton application est lente, cherches a la rendre plus rapide.

De facon general, optimiser prematurement une application est une perte de temps. Apres, c'est souvent une bonne chose de se rendre compte de ce qui est lent et de ce qui est rapide.

guyver2
guyver2
Niveau 10
03 avril 2013 à 01:17:57

une vingtaine de valeur dans un dictionnaire python ca va etre a peut pres immédiat. Et il n'y a aucune contre indication contre le fait de mettre toujours le meme type de donnes dedans.
Un dict en python est en fait une hashmap. A chaque cle est associe une valeur de hashage. Pour 20 valeur tu vas avoir sans doute aucune colision dans tes cle et donc un acces direct (modulo le temps de la fonction de hash). Et donc ce sera quasi aussi rapide qu'un acces dans un tableau par index, pas tout a fait mais clairement ce sera pas ca qui ralentira ton programme.

Les Dict sont parfait pour stocker des donnees et y acceder par leur nom (ou n'importe quelle autre type de cle). Apparement ce que tu fait c'est plutot une liste puisque tu accedes a tout tes elements par dict.values(). Dans ce cas la je pense qu'il vaut mieux que tu utilise directement une liste ou un tuple, accessible sequentielement par leur indice.

Encore une chose. Je doute que python reconstruise une liste a chaque appel de dict.values(). Je pense que l'implementation deriere est plus maline que ca. Et que le dict est en fait une liste de donnes (donc pas besoin de la reconstruire a chaque fois) associee a une table d'indice indiquant le lien cle-indice_dans_la_liste.

tl;dr : les dict c'est largement assez rapide pour ce que tu fais et si ca rame cherche ailleur :)

LGV
LGV
Niveau 28
03 avril 2013 à 12:03:35

je ne connais pas du tout le python, ni les possibilites qu'il offre d'implementer ses propres structures de donnees, mais des qu'on parle de dictionnaire et d'associer des mots a des objets, je pense tout de suite a un arbre lexical

c'est une structure de donnees particulierement adaptee, et la complexite d'une recherche est grossierement proportionnelle a la longueur du mot a chercher, non pas a la taille du dictionnaire

guyver2
guyver2
Niveau 10
03 avril 2013 à 12:58:25

clairement un arbre binaire de recherche est une structure efficace si toutes les clés sont des chaine de caractères. Mais pour le coup, un dict en python peut contenir des clés de tous type de base ou objet, meme un dict par exemple (dictception :) ), clés elles meme associé a n'importe quel type d'élément. C'est vraiment un four tout bien pratique :)

Difficile de mettre en place un abr sur des clés non comparable de manière triviales.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment