私は正確に次のことをしようとしています:
>>> x = (1,2)
>>> y = 'hello'
>>> '%d,%d,%s' % (x[0], x[1], y)
'1,2,hello'
ただし、x
が2つ以上ある長いので、試しました:
>>> '%d,%d,%s' % (*x, y)
しかし、それは構文エラーです。最初の例のようにインデックスを作成せずにこれを行う適切な方法は何でしょうか?
str % ..
は、右オペランドとしてタプルを受け入れるため、次のことができます。
>>> x = (1, 2)
>>> y = 'hello'
>>> '%d,%d,%s' % (x + (y,)) # Building a Tuple of `(1, 2, 'hello')`
'1,2,hello'
あなたの試みはPython 3.で動作するはずです。ここで Additional Unpacking Generalizations
はサポートされていますが、Python 2.x:ではサポートされていません。
>>> '%d,%d,%s' % (*x, y)
'1,2,hello'
おそらく str.format() をご覧ください。
>>> x = (5,7)
>>> template = 'first: {}, second: {}'
>>> template.format(*x)
'first: 5, second: 7'
完全を期すために、 PEP 448 で説明されている追加のアンパック一般化も含めています。拡張構文はPython 3.5で導入され、以下は構文エラーではなくなりました。
>>> x = (5, 7)
>>> y = 42
>>> template = 'first: {}, second: {}, last: {}'
>>> template.format(*x, y) # valid in Python3.5+
'first: 5, second: 7, last: 42'
Python 3.4以下では、アンパックされたタプルの後に追加の引数を渡したい場合は、おそらく名前付き引数:
>>> x = (5, 7)
>>> y = 42
>>> template = 'first: {}, second: {}, last: {last}'
>>> template.format(*x, last=y)
'first: 5, second: 7, last: 42'
これにより、最後に1つの余分な要素を含む新しいTupleを作成する必要がなくなります。
str.format
の代わりにstr %
を使用することをお勧めします。これは「より現代的」であり、優れた機能セットも備えているためです。それはあなたが欲しいものは次のとおりです:
>>> x = (1,2)
>>> y = 'hello'
>>> '{},{},{}'.format(*(x + (y,)))
1,2,hello
format
のすべてのクールな機能(および%
に関連する機能)については、 PyFormat をご覧ください。