リストを「適切に」印刷する方法は?


95

だから私はリストを持っています:

['x', 3, 'b']

そして、私は出力が欲しいです:

[x, 3, b]

Pythonでこれを行うにはどうすればよいですか?

使用するstr(['x', 3, 'b'])と、引用符が付いたものになりますが、引用符は必要ありません。


リストには、「適切に」印刷し、ではない理由を説明するためprint(["Sam"])の通話repr("Sam")に戻り、'Sam'あなたが呼び出すとは異なり、(引用符付き)、print("Sam")およびPythonのコールのstr("Sam")リターンSam(引用符なし)。詳細についてstr、およびreprまたはPython strlistsの違いを参照してください。
匿名

回答:


188

Python 2の場合:

mylist = ['x', 3, 'b']
print '[%s]' % ', '.join(map(str, mylist))

Python 3の場合(printは組み込み関数であり、もう構文機能ではありません):

mylist = ['x', 3, 'b']
print('[%s]' % ', '.join(map(str, mylist)))

どちらも戻ります:

[x, 3, b]

これは、map()関数を使用してmylistの各要素に対してstrを呼び出し、文字列の新しいリストを作成して、で1つの文字列に結合しますstr.join()。次に、%文字列の書式オペレータはではなく、文字列を置換%sして"[%s]"


4
よろしくお願いします。2行目で何をしているのか、もう少し詳しく説明していただけますか?私はPythonが初めてです。
Obaid

19
彼はmap関数を使用してのstr各要素を呼び出しmylist、文字列の新しいリストを作成して、で1つの文字列に結合していstr.joinます。その後、彼は使用%中の代わりの文字列を置換するオペレータをフォーマット文字列%sにします"[%s]"
li.davidm 2011年

6
多分もう少し現代的だとそれを行うための別の方法: "[{0}]".format(", ".join(str(i) for i in mylist))
ジャック・オコナー

2
が事前定義の呼び出し可能である場合、私はmap(f, xs)(またはimappython2.xで)よりも好む傾向があります。これは実行するバイトコードが少なくなる傾向があり、通常はよりコンパクトです。確かにいけないよりもはるかに悪いザッツ(f(x) for x in xs)f map(lambda x:..., xs)(... for x in xs)
SingleNegationElimination

1
@ user1767754:本当に?リンク?
SingleNegationElimination 2015年

18

これは単純なコードなので、初めての方でも簡単に理解できるはずです。

    mylist = ["x", 3, "b"]
    for items in mylist:
        print(items)

それはあなたが望んだように、引用符なしでそれらすべてを印刷します。


15

印刷のみを使用:

>>> l = ['x', 3, 'b']
>>> print(*l, sep='\n')
x
3
b
>>> print(*l, sep=', ')
x, 3, b

14

Python3を使用している場合:

print('[',end='');print(*L, sep=', ', end='');print(']')

1
ここでprint(* L)は何をしますか?
Sandeeps 2017


1
私はこれに混乱しています。長いデータ型はどうにかしてリストをフィルタリングしていますか?
dval 2017年

より簡潔なバージョンは次のようになりますprint(end='['); print(*l, sep=', ', end=']\n')
匿名の

9

を使用する代わりに、イテレータを受け入れるmap機能を持つジェネレータ式を使用することをお勧めしjoinます。

def get_nice_string(list_or_iterator):
    return "[" + ", ".join( str(x) for x in list_or_iterator) + "]"

ここでjoinは、文字列クラスのメンバー関数ですstr。引数は1つです。文字列のリスト(またはイテレータ)で、すべての要素を連結した新しい文字列を返します(この場合は),


2
2.xではmapがリストを返すため、Python 2の優れた最適化。3.xではジェネレータを返すので、それほど役に立ちません。
トム・ジッチ

7
私は戻ります", ".join( str(x) for x in list_or_iterator).join('[]')
eyquem

@eyquem:賢い、私は以前にそのような結合が使用されるのを見たことがない。それでも、それは初心者には少し不透明です(文字列は1文字の文字列の反復可能なコンテナであるというプロパティを使用しているため)。
セスジョンソン

6

引数にtranslate()methodを使用し、その後Nonetable引数から削除する文字を含む文字列を続けて、文字列から不要な文字をすべて削除できdeletecharsます。

lst = ['x', 3, 'b']

print str(lst).translate(None, "'")

# [x, 3, b]

2.6より前のバージョンのPythonを使用している場合、引数として渡す機能はPython 2.6まで追加されていなかったため、代わりにstringモジュールのtranslate()関数を使用する必要があります。これを使用すると、次のようになります。Nonetable

import string

print string.translate(str(lst), None, "'")

string.translate()関数の使用は2.6以降でも機能するため、使用することをお勧めします。


2
悲しいかな:lst = ["it isn't", 3, 'b']==> ["it isnt", 3, b]lst = ['it isn\'t', 3, 'b']
eyquem

1
@eyquem:はい、実際にデータの一部である文字の削除を回避するには(厳密にそれを区切るために使用されるのではなく)、可能であれば、やや複雑で異なるロジックが必要になります。
martineau

3

これは、@ TokenMacGuyのワンライナーのいくつかのステップを示すインタラクティブセッションです。まず、map関数を使用してリストの各アイテムを文字列に変換します(実際には、古いリストのアイテムを変換するのではなく、新しいリストを作成しています)。次に、彼は文字列メソッドjoinを使用して、それらの文字列を', 'それらの間で結合しています。残りは単なる文字列フォーマットで、これはかなり簡単です。(編集:このインスタンスは簡単です。文字列の書式設定は一般に多少複雑になる場合があります。)

を使用するjoinと、いくつかの部分文字列から文字列を作成する簡単で効率的な方法であることに注意してください。文字列に文字列を連続して追加するよりもはるかに効率的です。

>>> mylist = ['x', 3, 'b']
>>> m = map(str, mylist)
>>> m
['x', '3', 'b']
>>> j = ', '.join(m)
>>> j
'x, 3, b'

2

.format文字列のフォーマットに使用し、

mylist = ['x', 3, 'b']
print("[{0}]".format(', '.join(map(str, mylist))))

出力:

[x, 3, b]

説明:

  1. mapリストの各要素をstringタイプにマップするために使用されます。
  2. 要素は,、区切り記号として文字列に結合されます。
  3. printステートメントで[and を使用し]て、リストの中括弧を表示します。

参照: .format文字列フォーマット用PEP-3101


すごい!私.formatは最もpythonicの方法を使用して見つけます。しかし、もちろん、私は意見の相違を受け入れます。;)
loved.by.Jesus

0

@AniMenonに触発されて、より一般的なpythonicソリューションを作成しました。

mylist = ['x', 3, 'b']
print('[{}]'.format(', '.join(map('{}'.format, mylist))))

formatメソッドのみを使用します。の痕跡はstrなく、要素フォーマットの微調整が可能です。たとえば、リストの要素として浮動小数点数を使用している場合は、変換指定子を追加することで形式を調整できます。この場合は:.2f

mylist = [1.8493849, -6.329323, 4000.21222111]
print("[{}]".format(', '.join(map('{:.2f}'.format, mylist))))

出力はかなりまともです:

[1.85, -6.33, 4000.21]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.