[python] 줄 바꿈없이 인쇄 ( ‘a’인쇄)하면 공백이 인쇄됩니다. 제거하는 방법은 무엇입니까?

이 코드가 있습니다.

>>> for i in xrange(20):
...     print 'a',
...
a a a a a a a a a a a a a a a a a a a a

다음 과 같이 출력 'a'하고 ' '싶습니다.

aaaaaaaaaaaaaaaaaaaa

가능할까요?



답변

결과를 달성하는 방법에는 여러 가지가 있습니다. 귀하의 사례에 대한 해결책을 원한다면 @Ant가 언급 한대로 문자열 곱셈 을 사용하십시오 . 이것은 각 명령문이 동일한 문자열을 인쇄하는 경우에만 작동 합니다. 길이 문자열의 곱셈에 대해 작동 합니다 (예 : 작동).print'foo' * 20

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

일반적으로이 작업을 수행하려면 문자열을 구성한 다음 한 번 인쇄합니다. 이것은 문자열에 대해 약간의 메모리를 소비하지만 print. 사용하는 문자열 연결 +=은 이제 연결 하려는 문자열의 크기에서 선형이므로 빠릅니다.

>>> for i in xrange(20):
...     s += 'a'
...
>>> print s
aaaaaaaaaaaaaaaaaaaa

또는 sys.stdout을 사용하여 더 직접적으로 할 수 있습니다 . 쓰기 () , print래퍼 주위. 이것은 어떠한 형식도없이 당신이 제공 한 원시 문자열 만 쓸 것입니다. 20 초가 끝나도 개행 문자가 인쇄되지 않습니다 a.

>>> import sys
>>> for i in xrange(20):
...     sys.stdout.write('a')
...
aaaaaaaaaaaaaaaaaaaa>>> 

Python 3은 print명령문을 print () 함수 로 변경하여 end매개 변수 를 설정할 수 있습니다 . 에서 가져 와서> = 2.6에서 사용할 수 있습니다 __future__. 하지만 3.x를 사용 해본 적이없는 사람들에게는 약간 혼란 스러울 것이기 때문에 심각한 2.x 코드에서는 이것을 피하고 싶습니다. 그러나 3.x가 제공하는 장점 중 일부를 맛볼 수 있습니다.

>>> from __future__ import print_function
>>> for i in xrange(20):
...     print('a', end='')
...
aaaaaaaaaaaaaaaaaaaa>>> 


답변

에서 PEP 3105 : 인쇄 기능으로 에서 파이썬 2.6의 새로운 기능 문서 :

>>> from __future__ import print_function
>>> print('a', end='')

분명히 그것은 파이썬 3.0 이상 (또는 from __future__ import print_function처음 에는 2.6 이상)에서만 작동합니다 . 이 print명령문은 제거되었으며 print()Python 3.0에서는 기본적으로 함수 가되었습니다 .


답변

print명령문 사이의 stdout에 빈 문자열을 인쇄하여 공백을 억제 할 수 있습니다 .

>>> import sys
>>> for i in range(20):
...   print 'a',
...   sys.stdout.write('')
...
aaaaaaaaaaaaaaaaaaaa

그러나 더 깨끗한 해결책은 먼저 인쇄하려는 전체 문자열을 빌드 한 다음 단일 print문으로 출력하는 것입니다 .


답변

백 스페이스 문자 ( '\b')를 인쇄 할 수 있습니다 .

for i in xrange(20):
    print '\ba',

결과:

aaaaaaaaaaaaaaaaaaaa


답변

Python 3.x :

for i in range(20):
    print('a', end='')

Python 2.6 또는 2.7 :

from __future__ import print_function
for i in xrange(20):
    print('a', end='')


답변

한 번에 하나씩 표시하려면 다음을 수행하십시오.

import time
import sys
for i in range(20):
    sys.stdout.write('a')
    sys.stdout.flush()
    time.sleep(0.5)

sys.stdout.flush() 루프가 실행될 때마다 문자를 강제로 작성하는 데 필요합니다.


답변

참고로 :

인쇄는 O (1)이지만 문자열을 만든 다음 인쇄는 O (n)입니다. 여기서 n은 문자열의 총 문자 수입니다. 그렇습니다. 문자열을 만드는 것은 “더 깨끗”하지만 그렇게하는 가장 효율적인 방법은 아닙니다.

내가 할 방법은 다음과 같습니다.

from sys import stdout
printf = stdout.write

이제 매번 새 줄 문자를 반환하지 않고 주어진 문자열을 인쇄하는 “인쇄 함수”가 있습니다.

printf("Hello,")
printf("World!")

출력은 다음과 같습니다. Hello, World!

그러나 정수, 부동 소수점 또는 기타 문자열이 아닌 값을 인쇄하려면 str () 함수를 사용하여 문자열로 변환해야합니다.

printf(str(2) + " " + str(4))

출력은 다음과 같습니다. 2 4