web-dev-qa-db-ja.com

リスト要素を1行ずつ印刷する-フォーマットを使用して可能ですか

.format()で物事を印刷するためのまったく新しいPython規則)がとても好きです

それを使用して要素を1行ずつ印刷することは可能ですか?もちろん、要素の数は不明です。

実例をいただければ幸いです。

9
andilabs

文字列フォーマッタは、複数行の文字列を含む、実際にはあらゆる種類の文字列で使用できます。したがって、もちろん、フォーマット文字列'{}\n{}\n{}'がある場合は、3つのアイテムを渡すことができ、それらはすべて別々の行に配置されます。

したがって、印刷する要素の数が動的である場合、必要なのは、フォーマット文字列に同じ数のフォーマット項目が含まれていることを確認することだけです。これを解決する1つの方法は、フォーマット文字列を動的に作成することです。例:これ:

'\n'.join('{}' for _ in range(len(myList))).format(*myList)

したがって、基本的に最初にフォーマット文字列を作成します。ジェネレータにmyListの要素ごとに1つのフォーマットアイテム{}を生成させ、改行文字を使用してこれらを結合します。したがって、結果の文字列は次のようになります:{}\n{}\n…\n{}\n{}

次に、その文字列をフォーマット文字列として使用し、その文字列でformatを呼び出して、解凍されたリストを引数として渡します。したがって、フォーマット文字列のすべてのスポットを正しく埋めています。

だから、あなたはできますそれをします。ただし、これは実際には実用的なアイデアではありません。それはかなり混乱しているように見え、あなたの意図をうまく伝えていません。より良い方法は、リストの各アイテムを個別に処理し、個別にフォーマットして、thenのみを結合することです。

'\n'.join('{}'.format(item) for item in myList)

要素を1行ずつ印刷する場合は、もちろん、改行を含む1つの長い文字列を作成する必要がない、より明白な方法は、アイテムをループして1つずつ印刷することです。

for item in myList:
    print(item)

    # or use string formatting for the item here
    print('{}'.format(item))

そしてもちろん、fourtheyeが示唆したように、各ループの反復が非常に単純な場合は、リスト全体をprint関数に渡し、sep='\n'を設定して要素をそれぞれ別々の行に印刷することもできます。

7
poke

Python 3.xを使用していて、要素のリストを各行に1つずつ出力するだけの場合は、 print を使用できます。 =関数自体、このように

my_list = [1, 2, 3, 4]
print(*my_list, sep="\n")

*my_listは単にリスト要素を解凍し、それぞれをパラメーターとしてprint関数に渡します(はい、printはPython 3.x )。

出力

1
2
3
4

Python 2.xを使用している場合は、次のように将来から印刷関数をインポートできます。

from __future__ import print_function

注:このインポートはファイルの最初の行である必要があります。

16
thefourtheye

複雑にしないでおく

>>> myList = [2,3,5,6,5,4,3,2]

>>> for elem in myList:
    '{}'.format(elem)

与える

'2'
'3'
'5'
'6'
'5'
'4'
'3'
'2'

入手したいものですか?

1
kiriloff

print('\n'.join(a_list))のような意味ですか?文字列のフォーマットはおそらく'\n'.join(a_list)と同様のことを行う可能性がありますが、ここでは必要ないようです。 (更新を参照)

事は、.formatはまったく印刷しません。それがprintの目的です。 formatはデータを取得し、文字列を返します。 printは、その文字列を端末/標準出力に出力する1つの方法ですが、printおよび.format実際には何の関係もありません。

更新:

文字列のフォーマットについて私が言ったことを取り戻します。フォーマットパターン自体は、formatメソッドの arity を事前定義しているため、フォーマットパターンを動的に構築する以外に、これにformatを使用することはできません。

1
kojiro

これを行う別の方法は、文字列の乗算を使用することです。

list = [1, 2, 3, 4, 5]
print( ( '{}\n' * len(list) ).format( *list ) )

普通の古い印刷の場合は、printコマンドのsepオプションを使用します。 pythonロギング機能(sep引数がない)を使用している場合は、formatメソッドの方が便利です。

0
kamyonet

joinを使用して、1行ずつ印刷できます。

>>> x = ['a','b','c']
>>> print("\n".join(x))
a
b
c
0
Adarsh Pawar