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 :

Cherche équivalent à print(*list) pour sys.stdout.write()


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Cherche équivalent à print(*list) pour sys.stdout.write()
    Bonjour,

    Sur ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    list =[1,2,3,4,5]
    print(*list)
    On affiche rapidement les éléments de list :

    Je cherche une astuce aussi simple et rapide en utilisant sys.stdout.write() pour afficher les éléments de list.

    Sur ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import sys
    list =[1,2,3,4,5]
    sys.stdout.write(str(list) +'\n')
    J'affiche la liste :

    Comme avec :

    J'ai bien essayé de mettre des "*" dans tous les sens mais bien évidemment ça ne marche pas.
    J'ai fini par convertir la liste d'integer en liste de string :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import sys
    list =['1','2','3','4','5']
    list =' '.join(list)
    sys.stdout.write(str(list) +'\n')
    Ça marche, mais c'est franchement nul... y-a pas autre chose?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par MissLoop Voir le message
    Je cherche une astuce aussi simple et rapide en utilisant sys.stdout.write() pour afficher les éléments de list.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(*list, file=sys.stdout)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci beaucoup.

    En fait les temps d'exécution sont plutôt équivalents entre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print(*list)
    # &
    print(*list, file=sys.stdout)
    La vraie différence doit sûrement être plus significative sur des objets plus grands.

    Par contre si je reprends ma méthode galère, le temps d'exécution est super et même inférieur à l'affichage de la liste brute avec print().
    Seulement j'affiche des string.
    Donc bon an mal an en ajoutant l'exécution du retour à une liste d'integer, le temps risque de peut être s'alourdir selon la taille de l'objet?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    list3 =list(range(101))
     
    list4 =list(range(101))
    for i in range(len(list4)):
          list4[i] =str(i)
    list4 =' '.join(list4)
     
    t1 =time.clock()
    print(*list3)##############################
    t2 =time.clock()
    sys.stdout.write('PERFORM = %f\n' %(t2-t1) +'\n')
     
    t1 =time.clock()
    print(*list3, file =sys.stdout)############
    t2 =time.clock()
    sys.stdout.write('PERFORM = %f\n' %(t2-t1) +'\n')
     
    t1 =time.clock()
    print(list3)###############################
    t2 =time.clock()
    sys.stdout.write('PERFORM = %f\n' %(t2-t1) +'\n')
     
    t1 =time.clock()
    sys.stdout.write(str(list4) +'\n')########
    t2 =time.clock()
    sys.stdout.write('PERFORM = %f\n' %(t2-t1) +'\n')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 
    30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
     57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 8
    3 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
    PERFORM = 0.000050
     
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 
    30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
     57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 8
    3 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
    PERFORM = 0.000043
     
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2
    2, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 4
    2, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 6
    2, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 8
    2, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
    PERFORM = 0.000010
     
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 
    30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
     57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 8
    3 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
    PERFORM = 0.000002

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par MissLoop Voir le message
    Donc bon an mal an en ajoutant l'exécution du retour à une liste d'integer, le temps risque de peut être s'alourdir selon la taille de l'objet?
    Construire la chaîne de caractères à partir de la liste d'entiers est boulot que "print" vous évite de coder si vous passez par .write.
    Si vous comparer les 2 opérations, il faut comparer à "travail équivalent".

    Normalement vous devriez obtenir des temps comparables.

    Après, au plus la liste d'entier à convertir sera "grande", au plus çà prendra du temps... mais si vous affichez quelque chose, c'est pour le regarder et le temps que vous allez passer à lire les centaines de nombres sera tellement grand que vous ne le ferez pas (et plus la peine de les afficher).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Invité
    Invité(e)
    Par défaut
    Entièrement d'accord.
    La pertinence de l'affichage est à prendre en compte et si affichage il doit y avoir, alors je peux toujours construire une fonction qui va bien pour conjuguer typage et performance.

    Encore merci.

  6. #6
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    j'ai l'impressions que vous chercher à résoudre un problème que n'existe pas, non pas que l'optimisation n'est pas important mais que si vous trouvez que print n'est pas assez performant alors autant réécrire toutes les roues de Python et Python lui même, ou mieux utiliser un langage plus performant.

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

Discussions similaires

  1. cours pour bien comprendre write(*,*), print*, & read*
    Par jamalkamal dans le forum Fortran
    Réponses: 1
    Dernier message: 25/01/2016, 07h31
  2. [codage][console] différence entre print et sys.stdout.write
    Par MorganStern dans le forum Général Python
    Réponses: 1
    Dernier message: 03/08/2007, 19h20
  3. print vs sys.stdout.write
    Par Zorro dans le forum Général Python
    Réponses: 6
    Dernier message: 11/05/2007, 01h19
  4. Réponses: 26
    Dernier message: 06/01/2007, 13h11
  5. cherche équivalent librairie C++ linux pour windows
    Par jejerome dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 01/03/2006, 19h49

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