我想將多個變量追加到列表中。變量的數量各不相同。所有變量都以「音量」開頭。我在想也許是通配符或者什麼都可以。但我找不到像這樣的東西。任何想法如何解決這個問題?注意在這個例子中它是三個變量,但它也可以是五六個或任何其他的。將幾個變量追加到Python中的列表中
volumeA = 100
volumeB = 20
volumeC = 10
vol = []
vol.append(volume*)
我想將多個變量追加到列表中。變量的數量各不相同。所有變量都以「音量」開頭。我在想也許是通配符或者什麼都可以。但我找不到像這樣的東西。任何想法如何解決這個問題?注意在這個例子中它是三個變量,但它也可以是五六個或任何其他的。將幾個變量追加到Python中的列表中
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)]
+1;如果你有一堆變量的名字是按某種順序排列的,那麼你幾乎肯定是做錯了。 – geoffspear 2013-02-13 18:55:04
變量來自其他計算(我沒有在這裏發佈)。如果我使用字典,我有問題先把它們放到字典中。 – ustroetz 2013-02-13 19:00:33
編輯從列表中移除理解爲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')])
它可以幫助如果你能給這是更接近你的情況的一個實例。也就是說,你是如何得到變量數目不明的變量的? – 2013-02-13 18:43:46