web-dev-qa-db-ja.com

Pythonのリストにいくつかの変数を追加します

リストにいくつかの変数を追加したい。変数の数は異なります。すべての変数は「ボリューム」で始まります。私はおそらくワイルドカードか何かがそれをするだろうと考えていました。しかし、私はこのようなものを見つけることができませんでした。これを解決する方法はありますか?この例では3つの変数であることに注意してくださいが、5、6、またはその他の変数でもかまいません。

volumeA = 100
volumeB = 20
volumeC = 10

vol = []

vol.append(volume*)
13
ustroetz

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'))
14
Jon-Eric

できますが

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)]
5
georg

[〜#〜] 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]
3
sotapme

変数の名前と値を追加しますか?

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')])
0
user2040608