web-dev-qa-db-ja.com

Python-コンマで区切られたリストを出力する

カンマで区切られた項目のリストを出力するコードを書いています。リストはforループで生成されます。私は

for x in range(5):
    print(x, end=",")

問題は、リストの最後のエントリで追加された最後のコンマを削除する方法がわからないことです。これを出力します:

0,1,2,3,4,

末尾の '、'を削除するにはどうすればよいですか?

6
user2092743

_sep=","_を引数としてprint()に渡します

印刷ステートメントはもうすぐそこにあります。

ループは必要ありません。 print にはsepパラメータとendがあります。

_>>> print(*range(5), sep=", ")
0, 1, 2, 3, 4
_

少し説明

printビルトインは、出力される引数として任意の数の項目を取ります。キーワード以外の引数は、sepで区切られて出力されます。 sepのデフォルト値は単一のスペースです。

_>>> print("hello", "world")
hello world
_

sepを変更すると、期待どおりの結果が得られます。

_>>> print("hello", "world", sep=" cruel ")
hello cruel world
_

各引数は、str()と同様に文字列化されます。 iterableをprintステートメントに渡すと、iterableが1つの引数として文字列化されます。

_>>> print(["hello", "world"], sep=" cruel ")
['hello', 'world']
_

ただし、反復可能オブジェクトの前にアスタリスクを付けると、アスタリスクが個別の引数に分解され、sepの使用目的が可能になります。

_>>> print(*["hello", "world"], sep=" cruel ")
hello cruel world

>>> print(*range(5), sep="---")
0---1---2---3---4
_

代わりにjoinを使用する

特定のセパレータを使用してイテラブルを文字列に結合する別の方法は、セパレータ文字列のjoinメソッドを使用することです。

_>>>print(" cruel ".join(["hello", "world"]))
hello cruel world
_

文字列以外の要素を明示的に文字列に変換する必要があるため、これは少し扱いに​​くいです。

_>>>print(",".join([str(i) for i in range(5)]))
0,1,2,3,4
_

ブルートフォース-非Pythonic

あなたが提案するアプローチは、途中でコンマを追加して文字列を連結するためにループが使用されるアプローチです。もちろん、これは正しい結果を生成しますが、はるかに困難な作業です。

_>>>iterable = range(5)
>>>result = ""
>>>for item, i in enumerate(iterable):
>>>    result = result + str(item)
>>>    if i > len(iterable) - 1:
>>>        result = result + ","
>>>print(result)
0,1,2,3,4
_
15
Graeme Stuart

str.join() を使用して、印刷する文字列を作成してから印刷できます。例-

print(','.join([str(x) for x in range(5)]))

デモ -

>>> print(','.join([str(x) for x in range(5)]))
0,1,2,3,4

str.joinとともに使用すると、ジェネレータ式よりも高速であるため、上記のリスト内包表記を使用しています。

4
Anand S Kumar

これを行うには、 str.join() を使用できます。

_In [1]: print ','.join(map(str,range(5)))
0,1,2,3,4
_

range(5)を呼び出すには、最初にstr.join()の数値を文字列に変換する必要があります。 map() 操作を使用してこれを行います。次に、map()から取得した文字列のリストをカンマ_,_で結合します。

2
Rahul Gupta

元のコードに近い、使用できる別のフォーム:

opt_comma="" # no comma on first print
for x in range(5):
    print (opt_comma,x,sep="",end="") # we are manually handling sep and end
    opt_comma="," # use comma for prints after the first one
print() # force new line

もちろん、あなたのプログラムの意図は、おそらくこのスレッドの他のより多くのPythonicの答えによってよりよく提供されます。それでも、状況によっては、これは便利な方法である可能性があります。

0
RufusVS