書式設定関数に動的な幅を渡したい場合は、次のことができます。
>>> width = 5
>>> value = 2
>>> '%0*d' % (width, value)
'00002'
プレースホルダー内にプレースホルダーを埋め込むことができるため、新しいスタイルの書式設定を使用するとさらに簡単になります。
>>> width = 5
>>> value = 2
>>> '{1:0{0}}'.format(width, value)
'00002'
出力する前にすべての値の中で最も長い値を取得する方法も知りたい場合は、値を 2 回反復できる限り、それは非常に簡単です。
>>> values = 3, 100, 50000
>>> width = max(len('%0d' % value) for value in values)
>>> ', '.join('%0*d' % (width, value) for value in values)
'00003, 00100, 50000'
また、パラメーターに基づいて作成する場合は、さらに簡単です。
fx = lambda z,y=999: [ "%0*d" % (len('%0d' % y), x) for x in range(y) if str(z) in str(x) ]
ただし、これは の幅をy
何度も計算することになります。これは、式の内部に格納する簡単な方法がなく、 alambda
は式しか取得できないためです。
lambda
そもそもなぜ a を使用しているのかという疑問が生じます。lambda
overの唯一の利点はdef
、式で使用でき、名前を考える必要がないことです。名前に割り当てる場合は、両方の利点がなくなります。だから、これをしてください:
def fx(z, y=999):
width = len('%0d' % y)
return ["0%*d" % (width, x) for x in range(y) if str(z) in str(x)]