Odpowiedzi:
Istnieje wiele sposobów osiągnięcia wyniku. Jeśli szukasz tylko rozwiązania dla swojego przypadku, użyj mnożenia ciągów, jak wspomina @Ant . To zadziała tylko wtedy, gdy każda z twoich print
instrukcji wypisze ten sam ciąg. Zauważ, że działa on dla mnożenia dowolnego łańcucha długości (np. 'foo' * 20
Działa).
>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa
Jeśli chcesz to zrobić ogólnie, utwórz ciąg, a następnie wydrukuj go raz. Zuży to trochę pamięci dla ciągu, ale wykona tylko jedno wywołanie print
. Zauważ, że użycie konkatenacji ciągów +=
jest teraz liniowe względem rozmiaru łańcucha, który łączysz, więc będzie to szybkie.
>>> for i in xrange(20):
... s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa
Lub możesz to zrobić bardziej bezpośrednio, używając sys.stdout . write () , który print
jest opakowaniem wokół. Spowoduje to zapisanie tylko nieprzetworzonego ciągu, który mu podasz, bez żadnego formatowania. Zauważ, że żadna nowa linia nie jest drukowana nawet pod koniec 20 a
sekund.
>>> import sys
>>> for i in xrange(20):
... sys.stdout.write('a')
...
aaaaaaaaaaaaaaaaaaaa>>>
Python 3 zmienia print
instrukcję w funkcję print () , która umożliwia ustawienie end
parametru. Możesz go użyć w> = 2.6, importując z __future__
. Unikałbym tego jednak w każdym poważnym kodzie 2.x, ponieważ będzie to trochę mylące dla tych, którzy nigdy nie używali 3.x. Powinien jednak dać ci przedsmak dobrodziejstw, jakie niesie ze sobą 3.x.
>>> from __future__ import print_function
>>> for i in xrange(20):
... print('a', end='')
...
aaaaaaaaaaaaaaaaaaaa>>>
"".join(...)
zamiast tego.
+=
w Pythonie jest operacją trwającą w czasie dla konkatenacji pojedynczego znaku.
Z PEP 3105: drukuj jako funkcję w dokumencie What's New in Python 2.6 :
>>> from __future__ import print_function
>>> print('a', end='')
Oczywiście działa to tylko z Pythonem 3.0 lub nowszym (lub 2.6+ z literą from __future__ import print_function
na początku). print
Oświadczenie zostało usunięte i stał się print()
funkcja domyślnie w Pythonie 3.0.
Można pominąć spację, wypisując pusty ciąg na standardowe wyjście między print
instrukcjami.
>>> import sys
>>> for i in range(20):
... print 'a',
... sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa
Jednak czystszym rozwiązaniem jest najpierw zbudowanie całego ciągu, który chcesz wydrukować, a następnie wyprowadzenie go za pomocą pojedynczej print
instrukcji.
sys.stdout.write()
w tym przypadku używanie samego tylko jest wygodniejsze. Chciałem jednak pokazać, że zapisanie pustego ciągu na standardowe wyjście pomija odstępy między elementami napisanymi przy użyciu print
, co może być przydatne w podobnych sytuacjach.
Możesz wydrukować znak backspace ( '\b'
):
for i in xrange(20):
print '\ba',
wynik:
aaaaaaaaaaaaaaaaaaaa
Jeśli chcesz, aby pojawiały się pojedynczo, możesz to zrobić:
import time
import sys
for i in range(20):
sys.stdout.write('a')
sys.stdout.flush()
time.sleep(0.5)
sys.stdout.flush()
jest konieczne, aby wymusić zapis znaku przy każdym uruchomieniu pętli.
Na marginesie:
Drukowanie to O (1), ale budowanie ciągu, a następnie drukowanie to O (n), gdzie n to całkowita liczba znaków w ciągu. Więc tak, chociaż budowanie łańcucha jest „czystsze”, nie jest to najbardziej wydajna metoda zrobienia tego.
Sposób, w jaki bym to zrobił, jest następujący:
from sys import stdout
printf = stdout.write
Teraz masz „funkcję drukowania”, która wypisuje dowolny podany przez Ciebie ciąg bez zwracania za każdym razem znaku nowego wiersza.
printf("Hello,")
printf("World!")
Wynik będzie wyglądał następująco: Hello, World!
Jeśli jednak chcesz wydrukować liczby całkowite, zmiennoprzecinkowe lub inne wartości niebędące ciągami, musisz przekonwertować je na ciąg za pomocą funkcji str ().
printf(str(2) + " " + str(4))
Wynik będzie następujący: 2 4
to jest naprawdę proste
dla wersji Pythona 3+ wystarczy napisać następujące kody
for i in range(20):
print('a',end='')
po prostu przekonwertuj pętlę na następujące kody, nie musisz się martwić o inne rzeczy
ŁAŁ!!!
To było całkiem dawno temu
Teraz w Pythonie 3.x będzie to całkiem proste
kod:
for i in range(20):
print('a',end='') # here end variable will clarify what you want in
# end of the code
wynik:
aaaaaaaaaaaaaaaaaaaa
Więcej o funkcji print ()
print(value1,value2,value3,sep='-',end='\n',file=sys.stdout,flush=False)
Tutaj :
value1,value2,value3
można drukować wiele wartości za pomocą przecinków
sep = '-'
Trzy wartości zostaną oddzielone znakiem „-”
możesz użyć dowolnego znaku zamiast tego nawet łańcucha, takiego jak sep = '@' lub sep = 'good'
end='\n'
domyślnie funkcja drukowania umieszcza znak '\ n' na końcu wyjścia
ale możesz użyć dowolnego znaku lub ciągu, zmieniając wartość end variale
jak end = '$' lub end = '.' or end = 'Hello'
file=sys.stdout
jest to wartość domyślna, standardowe wyjście systemu
używając tego argumentu możesz utworzyć strumień pliku wyjściowego, taki jak
print("I am a Programmer", file=open("output.txt", "w"))
za pomocą tego kodu utworzysz plik o nazwie output.txt, w którym będą przechowywane dane wyjściowe Jestem programistą
flush = False
Jest to wartość domyślna przy użyciu flush = True , możesz wymusić opróżnienie strumienia
"".join("a" for i in xrange(20))
. (Jest to znacznie bardziej elastyczne niż zwykłe robienie tego"a" * 20
, ponieważ zakładam, że jest to uproszczony przykład).