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


124

이 코드가 있습니다.

>>> 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

가능할까요?


4
아직 아무도 언급하지 않은 것이 놀랍습니다 "".join("a" for i in xrange(20)). ( "a" * 20간단한 예라고 가정하므로 단순히하는 것보다 훨씬 더 유연 합니다.)
Thomas K

답변:


131

결과를 달성하는 방법에는 여러 가지가 있습니다. 귀하의 사례에 대한 해결책을 원한다면 @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>>> 

4
@AAI는 문자열 곱셈 답변이있을 때 질문을 읽고 몇 가지 옵션에 대한 개요를 제공 할 것이라고 생각했습니다. 내 대답을 모으는 동안 다른 사람들이 왔습니다. 곧 받아 들여 졌다면 삭제했을 가능성이 큽니다.
moinudin 2010

10
-1 연결하여 문자열을 작성하지 마십시오. O (n) 대신 O (n ^ 2)입니다. "".join(...)대신 사용하십시오 .
Katriel

10
나는 당신의 대답에 문제가 없으며 모든 것을 요약하고 그것은 좋습니다. 그러나 이렇게하면 대답하는 다른 사람들을 낙담하게됩니다. 좋은 답변이 많고 모두 +1 할 가치가 있습니다. 모두가 요약을하기 시작했다고 상상해보십시오.
user225312 2010-12-21

3
@katrielalex : 중요한가요? OP가 최적화 또는 복잡성을 요구 했습니까? 그리고 그것은 20 개의 현에 중요할까요? 어서, 진지하게 농담하는거야.
user225312

1
@katrielalex 잘못 +=되었습니다. Python에서 사용 하는 문자열 연결 은 단일 문자 연결을위한 일정한 시간 작업입니다.
moinudin 2010


41

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

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

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


4
@Soulseekah : 예, sys.stdout.write()이 경우 에만 사용하는 것이 더 편리합니다. 그러나 stdout에 빈 문자열을 작성하면를 사용하여 작성된 요소 사이의 공백이 억제 print되어 유사한 상황에서 유용 할 수 있음 을 보여주고 싶었습니다 .
Pär Wieslander 2010


30

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='')

10

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

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

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


7

참고로 :

인쇄는 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


한 글자를 출력하는 것과 동시에 무한한 양의 텍스트를 출력 할 수 있다고하십니까?
ctrl-alt-delor

printf를 stdout.write로 재정의했을 때 stdout.write는 문자열이 "Hello, 6"인 차트의 수를 인쇄하는 것 같습니다. 무슨 일이야? 그리고 어떻게 멈출 수 있습니까?
Tom

1
또한 O (1) O (n)의 의미를 설명해 주시겠습니까? 그게 무슨 말인지 이해
Tom

@Tom 작업 비용 의 반영으로 복잡성 (Big O 표기법)을 참조하는 것입니다 . O (1)은 일정한 시간 입니다. 이상 적이고 O (n)은 선형적인 시간입니다. 좋습니다. 하지만 너무 단순한 것에 비해 너무 비쌉니다. 비록 작은 일의 경우, 이러한 일에 대해 걱정하기 위해 두뇌를 사용하는 데 소비하는 시간은 단순히 문자열 연결을 사용하는 것보다 계산적으로 낭비입니다.
Benjamin R


6

무엇없이? 당신은 의미합니까

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

?


3

이것은 정말 간단합니다

파이썬 3+ 버전의 경우 다음 코드 만 작성하면됩니다.

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

루프를 다음 코드로 변환하기 만하면 다른 것에 대해 걱정할 필요가 없습니다.


2

와!!!

오래 전 이야

자, 파이썬 3.x 에서는 꽤 쉬울 것입니다.

암호:

for i in range(20):
      print('a',end='') # here end variable will clarify what you want in 
                        # end of the code

산출:

aaaaaaaaaaaaaaaaaaaa 

print () 함수에 대한 추가 정보

print(value1,value2,value3,sep='-',end='\n',file=sys.stdout,flush=False)

여기 :

value1,value2,value3

쉼표를 사용하여 여러 값 을 인쇄 할 수 있습니다.

sep = '-'

3 개의 값은 '-'문자로 구분됩니다.

sep = '@'또는 sep = 'good'과 같은 문자열 대신 모든 문자를 사용할 수 있습니다.

end='\n'

기본적으로 인쇄 기능은 출력 끝에 '\ n'문자를 넣습니다.

그러나 끝 변수 값을 변경하여 모든 문자 또는 문자열을 사용할 수 있습니다.

end = '$'또는 end = '.' 또는 end = 'Hello'

file=sys.stdout

이것은 기본값, 시스템 표준 출력입니다.

이 인수를 사용하면 다음 과 같은 출력 파일 스트림을 만들 수 있습니다.

print("I am a Programmer", file=open("output.txt", "w"))

이 코드를 사용하면 output.txt 라는 파일을 생성 할 수 있으며 여기에 I am a Programmer 라는 출력 이 저장됩니다.

flush = False

flush = True 를 사용하는 기본값입니다 . 스트림을 강제로 플러시 할 수 있습니다.


2

저것과 같이 쉬운

def printSleeping():
     sleep = "I'm sleeping"
     v = ""
     for i in sleep:
         v += i
         system('cls')
         print v
         time.sleep(0.02)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.