web-dev-qa-db-ja.com

改行なしで印刷( '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

出来ますか?

123
pythonFoo

結果を達成する方法はいくつかあります。ケースの解決策が必要な場合は、 @ Ant 言及として 文字列の乗算 を使用します。これは、各printステートメントが同じ文字列を出力する場合にのみ機能します。任意の長さの文字列の乗算で機能することに注意してください(たとえば、'foo' * 20は機能します)。

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

これを一般的に行いたい場合は、文字列を作成してから一度印刷します。これは文字列のためにメモリを少し消費しますが、printを1回呼び出すだけです。 +=を使用した文字列の連結は、連結する文字列のサイズに対して線形になるため、これが高速になることに注意してください。

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

または、 sys.stdout .. write() を使用してより直接行うことができます。これはprintがラッパーです。これにより、フォーマットせずに、指定した生の文字列のみが書き込まれます。 20個のasの終わりでも改行は出力されないことに注意してください。

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

Python 3はprintステートメントを print()function に変更します。これにより、endパラメーターを設定できます。 __future__からインポートすることにより、2.6以上で使用できます。ただし、3.xを使用したことがない人にとっては少し混乱するため、深刻な2.xコードではこれを避けます。ただし、3.xがもたらすいくつかの良さを味わう必要があります。

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

PEP 3105:関数として印刷What's New in Python 2.6 ドキュメント:

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

明らかに、それはpython 3.0以降(または先頭にfrom __future__ import print_functionが付いた2.6以降)でのみ動作します。 printステートメントは削除され、Python 3.0ではデフォルトでprint()関数になりました。

119
Antoine Pelisse

printステートメント間のstdoutに空の文字列を出力することにより、スペースを抑制することができます。

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

ただし、よりクリーンなソリューションは、最初に印刷したい文字列全体を構築し、それを単一のprintステートメントで出力することです。

41
Pär Wieslander

バックスペース文字('\b')を印刷できます:

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

結果:

aaaaaaaaaaaaaaaaaaaa
34
Lucas Moeskops

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

一度に1つずつ表示する場合は、次の操作を実行できます。

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

sys.stdout.flush()は、ループが実行されるたびに文字を強制的に書き込むために必要です。

10
daviewales

補足として:

印刷は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

7
Kyle Siopiolosz

何なしで?という意味ですか

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

6
Ant

What Antsays のいずれか、または文字列に蓄積してから1回印刷する:

s = '';
for i in xrange(20):
    s += 'a'
print s
6
jensgram

これは本当に簡単です

python 3+バージョンの場合、次のコードを記述するだけです。

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

ループを次のコードに変換するだけで、他のことを心配する必要はありません

3
Shad Munir

WOW !!!

かなり長い時間

さて、In python 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を使用したデフォルト値です。強制的にストリームをフラッシュできます。

それと同じくらい簡単

def printSleeping():
     sleep = "I'm sleeping"
     v = ""
     for i in sleep:
         v += i
         system('cls')
         print v
         time.sleep(0.02)
2
TLEJMI