Réponses:
Il existe plusieurs façons d'atteindre votre résultat. Si vous souhaitez simplement une solution pour votre cas, utilisez la multiplication de chaînes comme le mentionne @Ant . Cela ne fonctionnera que si chacune de vos print
instructions imprime la même chaîne. Notez que cela fonctionne pour la multiplication de toute chaîne de longueur (par exemple, 'foo' * 20
fonctionne).
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa
Si vous voulez faire cela en général, créez une chaîne et imprimez-la une fois. Cela consommera un peu de mémoire pour la chaîne, mais ne fera qu'un seul appel à print
. Notez que la concaténation de chaînes en utilisant +=
est maintenant linéaire dans la taille de la chaîne que vous concaténez donc ce sera rapide.
>>> for i in xrange(20):
... s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa
Ou vous pouvez le faire plus directement en utilisant sys.stdout . write () , qui print
est un wrapper autour. Cela n'écrira que la chaîne brute que vous lui donnez, sans aucun formatage. Notez qu'aucune nouvelle ligne n'est imprimée même à la fin des 20 a
s.
>>> import sys
>>> for i in xrange(20):
... sys.stdout.write('a')
...
aaaaaaaaaaaaaaaaaaaa>>>
Python 3 transforme l' print
instruction en une fonction print () , qui vous permet de définir un end
paramètre. Vous pouvez l'utiliser dans> = 2.6 en important depuis__future__
. J'éviterais cela dans tout code 2.x sérieux, car ce sera un peu déroutant pour ceux qui n'ont jamais utilisé 3.x. Cependant, cela devrait vous donner un avant-goût de certains des bienfaits que la 3.x apporte.
>>> from __future__ import print_function
>>> for i in xrange(20):
... print('a', end='')
...
aaaaaaaaaaaaaaaaaaaa>>>
"".join(...)
plutôt.
+=
en Python est une opération à temps constant pour la concaténation d'un seul caractère.
De PEP 3105: imprimer en tant que fonction dans le document Quoi de neuf en Python 2.6 :
>>> from __future__ import print_function
>>> print('a', end='')
Évidemment, cela ne fonctionne qu'avec python 3.0 ou supérieur (ou 2.6+ avec un from __future__ import print_function
au début). L' print
instruction a été supprimée et est devenue la print()
fonction par défaut dans Python 3.0.
Vous pouvez supprimer l'espace en imprimant une chaîne vide vers stdout entre les print
instructions.
>>> import sys
>>> for i in range(20):
... print 'a',
... sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa
Cependant, une solution plus propre consiste d'abord à créer la chaîne entière que vous souhaitez imprimer, puis à la sortir avec une seule print
instruction.
sys.stdout.write()
est plus pratique dans ce cas. Cependant, je voulais montrer que l'écriture d'une chaîne vide dans stdout supprime l'espace entre les éléments écrits en utilisant print
, ce qui pourrait être utile dans des situations similaires.
Vous pouvez imprimer un caractère de retour arrière ( '\b'
):
for i in xrange(20):
print '\ba',
résultat:
aaaaaaaaaaaaaaaaaaaa
Si vous souhaitez qu'ils s'affichent un par un, vous pouvez le faire:
import time
import sys
for i in range(20):
sys.stdout.write('a')
sys.stdout.flush()
time.sleep(0.5)
sys.stdout.flush()
est nécessaire pour forcer l'écriture du caractère à chaque exécution de la boucle.
Juste comme note latérale:
L'impression est O (1) mais la construction d'une chaîne, puis l'impression est O (n), où n est le nombre total de caractères dans la chaîne. Donc oui, bien que la construction de la chaîne soit "plus propre", ce n'est pas la méthode la plus efficace pour le faire.
La façon dont je le ferais est la suivante:
from sys import stdout
printf = stdout.write
Maintenant, vous avez une "fonction d'impression" qui imprime toute chaîne que vous lui donnez sans retourner le caractère de nouvelle ligne à chaque fois.
printf("Hello,")
printf("World!")
Le résultat sera: Hello, World!
Cependant, si vous souhaitez imprimer des entiers, des flottants ou d'autres valeurs non-chaîne, vous devrez les convertir en chaîne avec la fonction str ().
printf(str(2) + " " + str(4))
La sortie sera: 2 4
c'est vraiment simple
pour les versions de python 3+, il vous suffit d'écrire les codes suivants
for i in range(20):
print('a',end='')
convertissez simplement la boucle dans les codes suivants, vous n'avez pas à vous soucier d'autres choses
SENSATIONNEL!!!
C'est joli longtemps il y a
Maintenant en python 3.x, ce sera assez facile
code:
for i in range(20):
print('a',end='') # here end variable will clarify what you want in
# end of the code
production:
aaaaaaaaaaaaaaaaaaaa
En savoir plus sur la fonction print ()
print(value1,value2,value3,sep='-',end='\n',file=sys.stdout,flush=False)
Ici :
value1,value2,value3
vous pouvez imprimer plusieurs valeurs en utilisant des virgules
sep = '-'
3 valeurs seront séparées par le caractère '-'
vous pouvez utiliser n'importe quel caractère au lieu de cette chaîne paire comme sep = '@' ou sep = 'good'
end='\n'
par défaut la fonction d'impression place le caractère '\ n' à la fin de la sortie
mais vous pouvez utiliser n'importe quel caractère ou chaîne en changeant la valeur de fin variale
comme end = '$' ou end = '.' ou end = 'Bonjour'
file=sys.stdout
il s'agit d'une valeur par défaut, sortie standard du système
en utilisant cet argument, vous pouvez créer un flux de fichier de sortie comme
print("I am a Programmer", file=open("output.txt", "w"))
par ce code vous créerez un fichier nommé output.txt où votre sortie Je suis un programmeur sera stockée
flush = False
C'est une valeur par défaut en utilisant flush = True, vous pouvez vider de force le flux
"".join("a" for i in xrange(20))
. (C'est beaucoup plus flexible que de simplement faire"a" * 20
, car je suppose que c'est un exemple simplifié).