括弧なしのリストを1行で印刷する


162

私はPythonでリストを持っています例えば

names = ["Sam", "Peter", "James", "Julian", "Ann"]

通常の "[]なしで、配列を1行で出力したい

names = ["Sam", "Peter", "James", "Julian", "Ann"]
print (names)

出力は次のようになります。

["Sam", "Peter", "James", "Julian", "Ann"]

それは私が望むフォーマットではなく、このようにしたいです。

Sam, Peter, James, Julian, Ann

注:単一の行にする必要があります。

回答:


242
print(', '.join(names))

これは、聞こえのように、リストのすべての要素を取り、それらをと結合します', '


9
の一部の要素namesが文字列でない場合は、print(', '.join(map(str,name)))代わりに使用してください。
匿名

78

ここに簡単なものがあります。

names = ["Sam", "Peter", "James", "Julian", "Ann"]
print(*names, sep=", ")

スターはリストをアンパックし、リスト内のすべての要素を返します。


8
python 2.7.6、これはSyntaxError: invalid syntaxです。
Fredrick Gauss

1
@FredrickGaussを追加するfrom __future__ import print_functionと、Python 2でも機能します。
Anthony Sottile 2017

1
文字列以外でも機能するため、これは正しい答えです。
オトカン

41

一般的な解決策は、非文字列の配列で機能します。

>>> print str(names)[1:-1]
'Sam', 'Peter', 'James', 'Julian', 'Ann'

9
これは指定された要件を満たしていません。OPの例で、引用符なしの結果の名前を示していることに注意してください。
John Y

1
@SteveBennettは、回答のスライス[1:-1]について説明していただけますか。私はちょうどPythonを学び始めました。ありがとうございました。
Charan

3
str(names)のような文字列を生成します['Sam', 'Peter'...'Ann']。角括弧は必要ないため、2番目の文字から2番目の文字までスライスします。
スティーブベネット、

22

入力配列が整数型の場合は、最初に配列を文字列型配列に変換し、次にjoinメソッドを使用して結合し,たりスペースを入れたりする必要があります。例えば:

>>> arr = [1, 2, 4, 3]
>>> print(", " . join(arr))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
>>> sarr = [str(a) for a in arr]
>>> print(", " . join(sarr))
1, 2, 4, 3
>>>

整数と文字列を結合する結合を直接使用すると、上記のようにエラーがスローされます。


18

2つの答えがあります。1つ目は「sep」設定を使用することです。

>>> print(*names, sep = ', ')

他は以下です

>>> print(', '.join(names))


7

','.join(list)リスト内のすべてのアイテムが文字列である場合にのみ機能します。数値のリストをコンマ区切りの文字列に変換する場合。などa = [1, 2, 3, 4]'1,2,3,4'、あなたはどちらかできます

str(a)[1:-1] # '1, 2, 3, 4'

または

str(a).lstrip('[').rstrip(']') # '1, 2, 3, 4'

ただし、ネストされたリストは削除されません。

リストに戻すには

a = '1,2,3,4'
import ast
ast.literal_eval('['+a+']')
#[1, 2, 3, 4]

4

リストをループして、end=" "それを1行に保つために使用する必要があります

names = ["Sam", "Peter", "James", "Julian", "Ann"]
    index=0
    for name in names:
        print(names[index], end=", ")
        index += 1

OPは、1行に収める必要があると述べています。
アリ

2

print(* names)

スペースで区切って印刷したい場合、これはpython 3で動作します。間にコンマなどが必要な場合は、.join()ソリューションを使用してください


1

他の人と同じようにこれが効率的かどうかはわかりませんが、単純なロジックは常に機能します。

import sys
name = ["Sam", "Peter", "James", "Julian", "Ann"]
for i in range(0, len(names)):
    sys.stdout.write(names[i])
    if i != len(names)-1:
        sys.stdout.write(", ")

出力:

サム、ピーター、ジェームズ、ジュリアン、アン


0

次の関数はリストを受け取り、リストのアイテムの文字列を返します。これは、ロギングまたは印刷の目的で使用できます。

def listToString(inList):
    outString = ''
    if len(inList)==1:
        outString = outString+str(inList[0])
    if len(inList)>1:
        outString = outString+str(inList[0])
        for items in inList[1:]:
            outString = outString+', '+str(items)
    return outString
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.