2013-02-13 13 views
13

複数の変数をリストに追加したい。変数の数はさまざまです。すべての変数は "volume"で始まります。私は多分ワイルドカードか何かがそれをすると思っていた。しかし、私はこのようなものを見つけることができませんでした。任意のアイデアをどのようにこれを解決するには?この例では3つの変数になっていますが、5または6などの値もあります。複数の変数をPythonのリストに追加する

volumeA = 100 
volumeB = 20 
volumeC = 10 

vol = [] 

vol.append(volume*) 
+1

あなたがあなたの状況に近いだ例を与えることができればそれが役立つかもしれません。つまり、どのように名前が分からない可変数の変数で終わったのでしょうか? –

答えて

13

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')) 
4

あなたが行うことができますが

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)] 
+1

+1;名前が何らかの順序で並んでいる変数がたくさんある場合は、間違いなく間違いなく実行しています。 – geoffspear

+1

変数は他の計算結果です(ここでは投稿していません)。私が辞書を使うのであれば、問題を最初に辞書に入れてしまいました。 – ustroetz

3

EDITはリスト内包からfilterを削除しました。

私はそれを変更しましたので、他の答えもあまりにも似ていません。あなたがリストに任意のイテラブルを追加するextendを使用することができます

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

理解の中でフィルターコールが私を悲しくします... – JBernardo

+0

あなたのコメントは私が間違っていたことを実感してくれます:D - 明日はバレンタインデーです。 – sotapme

+0

'filter'を使い続けるために単に' map'を使うことに変えるのは醜いことです。 JBernardoの主張は、コンパイルには既にオプションのif節が組み込まれているということだと思うので、 'filter'の代わりにそれを使用してください。 –

0

あなたは、変数の名前を追加するだけでなく、か彼らの価値?

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')]) 
関連する問題