改行なしで印刷すると(print '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単純化した例だと思うので、を実行するよりもはるかに柔軟性があります)。
トーマスK

回答:


131

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

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa

これを一般的に行いたい場合は、文字列を作成し、それを1回印刷します。これにより、文字列のメモリが少し消費されますが、への呼び出しは1回だけ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__。ただし、深刻な2.xコードではこれを回避します。これは、3.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 2010

10
私はあなたの答えに問題はありません、それはすべてを要約していて、それは良いことです。しかし、これを行うことで、答える他の人を思いとどまらせます。多くの良い答えがあり、すべて+1に値します。みんなが要約を作り始めたと想像してみてください。
user225312 2010

3
@katrielalex:それは重要ですか?OPは最適化または複雑さを要求しましたか?そしてそれは20本の弦にとって重要でしょうか?さあ、あなたは真剣に冗談を言っているに違いありません。
user225312 2010

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、を使用して記述された要素間のスペースが抑制されることを示したかったので、同様の状況で役立ちます。
パーWieslander


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

それらを一度に1つずつ表示する場合は、次のようにします。

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


1文字を出力すると同時に、無限のテキストを出力できると思いますか?
ctrl-alt-delor 2015年

printfをstdout.writeに再定義すると、stdout.writeがグラフ文字数を出力しているようです。文字列は "Hello、6"です。どうしたの?そして、どうすればそれを止められますか?
トム

1
また、O(1)O(n)の意味を説明できますか?それが何を意味するのか理解できません
トム

@Tom オペレーションのコストを反映するものとして、複雑さ(Big O表記)を指します。O(1)は一定の時間です- 理想的です -そしてO(n)は線形時間です- 大丈夫ですがとても単純なものには高すぎます。小さなことについては、これらのことを心配するために脳を使うのに費やす時間は、文字列の連結を使用するよりも計算上無駄になります。
ベンジャミンR


6

何もないの?もしかして

>>> print 'a' * 20
aaaaaaaaaaaaaaaaaaaa


3

これは本当に簡単です

Python 3以降のバージョンでは、次のコードを書くだけで済みます

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

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


2

ワオ!!!

それはかなりです、長い時間前に

さて、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という名前のファイルが作成されます

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.