IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Optimisation de code


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 87
    Par défaut Optimisation de code
    Bonjour, je suis actuellement le cours sur le Python et suite à un TP (5.8. Écrivez un script qui recopie une chaîne (dans une nouvelle variable), en insérant des astérisques entre les caractères.
    Ainsi par exemple, « gaston » devra devenir « g*a*s*t*o*n »), j'ai réalisé un code, il fonctionne mais j'aimerais savoir s'il y a moyen de l'optimiser et de le rendre plus propre.

    Le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    chaine, nouvelle_chaine = "gaston7895", ""
    longueur = len(chaine)
    i = 0
     
    while i < longueur-1 :
    	nouvelle_chaine = nouvelle_chaine + chaine[i]+"*"
    	i=i+1
    nouvelle_chaine = nouvelle_chaine+chaine[longueur-1]
    print nouvelle_chaine
    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il y a une solution super simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    x = "gaston"
    y =  '*'.join(list(x))
    print y
    'g*a*s*t*o*n'
    Tyrtamos

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 87
    Par défaut
    Merci ! Je n'ai pas encore appris ça mais je le saurai pour la suite

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bonjour,

    Bien sûr.

    Conseils:

    - une fois qu’on a trouvé une solution à un problème, le réexaminer en se disant:
    je suis sûr qu’il doit être possible de faire plus concis

    - si on arrive à faire plus concis, c’est souvent parce que Python dispose d’une fonction qui fait en un appel ce qu’on a fait avec plusieurs lignes de codes

    - pour trouver les fonctions sur les chaînes:
    http://www.python.org/doc/2.6.2/libr...html#index-585
    section 6.6.1

    J’aime bien aussi la présentation de la version 2.5
    http://www.python.org/doc/2.5.4/lib/...s.html#l2h-233

    - proverbe pythonien
    Ton code meilleure mine aura
    Toutes fois qu’indices élimineras


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    li = [23,56,34,67,56,35]
    k = 0
    while k<len(li):
        print li[k]
    c’est berk, alors qu’on peut faire


    Par ailleurs il y a déjà eu deux ou trois files sur ce problème, il sufit de faire une recherche.

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Un simple boucle for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in chaine: print i+"*",

  6. #6
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Si le but est l'optimisation, des print consécutifs ne sont pas une bonne solution.
    Un print, c'est un appel système. Pour l'effectuer, il faut un context switch du processeur. De plus, selon le système d'exploitation, ça peut obliger aussi à sauvegarder tous les registres du processeur. Enfin, ça passe par un fichier (stdout), donc un buffer, donc des fonctions de contrôles.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Merci Antoine935 pour ces explications.
    Je comprends enfin pourquoi l’affichage d’un grand nombre de courtes chaînes est long.


    Mais il y a un moyen de contourner le ralentissement: cumuler dans une seule chaîne plusieurs affichages courts.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ch = 'gaston'
    mh = ch[0]
    for c in ch[1:]:
        mh += '*' + c
    print mh

    Application intéressante:
    afficher instantanément sous forme repr(ligne) les lignes d’un code source de site, ligne par ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import urllib
    sock = urllib.urlopen('http://www.partir.com/Equateur/Galapagos/')
    somt = ''
    for ln in sock:
        somt += '\n' + repr(ln)
    sock.close()
    print somt
    '<html>\n'
    '<head>\n'
    ' \n'
    "<title>Galapagos - Iles d'Equateur - tr\xe9sor de faune et flore</title>\n"
    ' <meta name="KeyWords" content="Equateur, Galapagos, Tourisme, voyage, Darwin, iguanes">\n'
    '</head>\n'
    '<Body BGColor="#FFFFFF" Link="#1580EA" VLink="#0A4075">\n'
    '\r\n'
    '\n'
    '\n'
    '\n'
    '\n'
    '<table>\n'
    ' <tr> \n'
    ' <td align=left>\n'
    '\n'
    '<script type="text/javascript"><!--\n'
    'google_ad_client = "pub-5608884666532582";\n'
    'google_ad_width = 728;\n'
    'google_ad_height = 90;\n'
    etc
    etc

    ----------------------------

    Petite défi-nette

    comment obtenir, sans expression régulière
    *c*h*o*c*o*l*a*t*
    à partir de
    chocolat?
    .

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Citation Envoyé par eyquem Voir le message
    Petite défi-nette

    comment obtenir, sans expression régulière
    *c*h*o*c*o*l*a*t*
    à partir de
    chocolat?
    .
    j'comprends pas la question ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo