リストにいくつかの変数を追加したい。変数の数は異なります。すべての変数は「ボリューム」で始まります。私はおそらくワイルドカードか何かがそれをするだろうと考えていました。しかし、私はこのようなものを見つけることができませんでした。これを解決する方法はありますか?この例では3つの変数であることに注意してくださいが、5、6、またはその他の変数でもかまいません。
volumeA = 100
volumeB = 20
volumeC = 10
vol = []
vol.append(volume*)
extend
を使用して、イテレート可能オブジェクトをリストに追加できます。
vol.extend((volumeA, volumeB, volumeC))
変数名のプレフィックスに応じて、私には悪いコードの匂いがしますが、あなたはそれを行うことができます。 (値が追加される順序は定義されていません。)
vol.extend(value for name, value in locals().items() if name.startswith('volume'))
順序が重要な場合(私見、まだ悪臭がする):
vol.extend(value for name, value in sorted(locals().items(), key=lambda item: item[0]) if name.startswith('volume'))
できますが
vol = []
vol += [val for name, val in globals().items() if name.startswith('volume')]
# replace globals() with locals() if this is in a function
より良いアプローチは、同様の名前の変数の代わりに辞書を使用することです:
volume = {
'A': 100,
'B': 20,
'C': 10
}
vol = []
vol += volume.values()
後者の場合、アイテムの順序は指定されていないことに注意してください。つまり、[100,10,20]
または[10,20,100]
。キーの順序でアイテムを追加するには、次を使用します。
vol += [volume[key] for key in sorted(volume)]
[〜#〜] edit [〜#〜]恐ろしいアイデアであることが強調されたため、リストの理解からfilter
を削除しました。
他のすべての答えもあまり似ていないように変更しました。
volumeA = 100
volumeB = 20
volumeC = 10
lst = map(lambda x : x[1], filter(lambda x : x[0].startswith('volume'), globals().items()))
print lst
出力
[100, 10, 20]
変数の名前と値を追加しますか?
output=[]
output.append([(k,v) for k,v in globals().items() if k.startswith('volume')])
または値のみ:
output.append([v for k,v in globals().items() if k.startswith('volume')])