2011-09-27 5 views
61

の文字列は、xのエントリ数に一致する、さまざまな数の%sのトークンを持つPython 2.6.5で構成します。私は書式設定された文字列を書く必要があります。以下は動作しませんが、私が何をしようとしているのかを示しています。この例では、3つの%sトークンがあり、リストには3つのエントリがあります。リストでのPython文字列フォーマットの使用

s = '%s BLAH %s FOO %s BAR' 
x = ['1', '2', '3'] 
print s % (x) 

私はあることを出力文字列が欲しい:あなたのpythonのformat方法に見てみる必要があります

1 BLAH 2 FOO 3 BAR

答えて

17

このresource pageに続いて、xの長さが変化している場合は、私たちが使用することができます。

', '.join(['%.2f']*len(x)) 

をから、各要素のためのプレースホルダーを作成しますリストx。ここに例があります:

x = [1/3.0, 1/6.0, 0.678] 
s = ("elements in the list are ["+', '.join(['%.2f']*len(x))+"]") % tuple(x) 
print s 
>>> elements in the list are [0.33, 0.17, 0.68] 
74
print s % tuple(x) 

代わりの

print s % (x) 
+2

'(x)'は 'x'と同じものです。括弧で囲まれた単一のトークンは、Pythonでは意味を持ちません。あなたは通常 'foo =(bar、)'に括弧を入れて読みやすくしますが、 'foo = bar 'はまったく同じことをします。 – patrys

+6

'print s%(x)'はOPが書いたもので、私は彼/彼女を引用していただけです。 – infrared

+0

私は言語のヒントを提供していただけで、あなたの答えを批判していませんでした(実際に私はそれを+1しました)。'foo =(bar、)'と書くことはできませんでした。 – patrys

99

。次に、このようなあなたの書式文字列を定義することができます。

>>> s = '{0} BLAH {1} BLAH BLAH {2} BLAH BLAH BLAH' 
>>> x = ['1', '2', '3'] 
>>> print s.format(*x) 
'1 BLAH 2 BLAH BLAH 3 BLAH BLAH BLAH' 
+0

Python 2.6+のみ。 – agf

+1

OPは2.6.5 - > ok – glglgl

+1

を使用OPの問題は方法ではなく、パラメータの形式です。 '%'演算子はタプルのみを展開します。 – patrys

11

私はちょうどこのクールなことについて知っていたので(フォーマット文字列内のリストへのインデックス付け)、この古い質問に追加しています。

s = '{x[0]} BLAH {x[1]} FOO {x[2]} BAR' 
x = ['1', '2', '3'] 
print s.format (x=x) 

しかし、私はまだ(、フォーマット文字列'"{x[2:4]}".format...の内側に)スライス行う方法を考え出したていないと、誰もがアイデアを持っている場合はそれを把握するのが大好きだ、しかし私はあなたが単純に行うことができないと思われますそれ。

+0

私はスライスのユースケースについて少し戸惑っています。 – Michael

+0

私は本当に1つ持っていない...私はちょうどそれができるようにすっきりと思ったと思う –

4

これは楽しい質問でした。可変長リストの.formatメソッドでこれを処理する別の方法は、リストの展開を最大限に活用する関数を使用することです。次の例では、派手な書式は使用していませんが、必要に応じて簡単に変更できます。

list_1 = [1,2,3,4,5,6] 
list_2 = [1,2,3,4,5,6,7,8] 

# Create a function to easily repeat on many lists: 
def ListToFormattedString(alist): 
    # Each item is right-adjusted, width=3 
    formatted_list = ['{:>3}' for item in alist] 
    s = ','.join(formatted_list) 
    return s.format(*alist) 

# Example output: 
>>>ListToFormattedString(list_1) 
' 1, 2, 3, 4, 5, 6' 
>>>ListToFormattedString(list_2) 
' 1, 2, 3, 4, 5, 6, 7, 8' 
-1

ともそれを行うにはpython 3.6+で可能です:

x = ['1', '2', '3'] 
print(f"{x[0]} BLAH {x[1]} FOO {x[2]} BAR") 
0

はここで、リスト上の印刷()でフォーマットを使用するのはほとんど即興の答えです。 (PY3)

sample_list = ['cat', 'dog', 'bunny', 'pig'] 
print("Your list of animals are: {}, {}, {} and {}".format(*sample_list)) 

ここformatを使用して上のドキュメントを読む:これについてどのように

関連する問題