18

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

volumeA = 100
volumeB = 20
volumeC = 10

vol = []

vol.append(volume*)
4

5 に答える 5

17

extendリストにイテラブルを追加するために使用できます。

vol.extend((volumeA, volumeB, volumeC))

変数名の接頭辞によっては、コードの臭いがしますが、それは可能です。(値が追加される順序は定義されていません。)

vol.extend(value for name, value in locals().items() if name.startswith('volume'))

順序が重要な場合(IMHO、まだ臭いがします):

vol.extend(value for name, value in sorted(locals().items(), key=lambda item: item[0]) if name.startswith('volume'))
于 2013-02-13T18:34:57.697 に答える
6

できるのに

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()

後者の場合、項目の順序は指定されていないことに注意してください。つまり、 get[100,10,20]またはを取得できます[10,20,100]。キーの順序で項目を追加するには、次を使用します。

vol += [volume[key] for key in sorted(volume)]
于 2013-02-13T18:34:21.433 に答える
3

EDITfilterは、恐ろしいアイデアであることが強調されたため、リストの理解から削除されました。

私はそれを変更したので、他のすべての回答とあまり似ていません。

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]
于 2013-02-13T18:34:26.513 に答える
2

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

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')])
于 2013-02-13T19:00:47.033 に答える