2013-02-13 52 views
13

我想將多個變量追加到列表中。變量的數量各不相同。所有變量都以「音量」開頭。我在想也許是通配符或者什麼都可以。但我找不到像這樣的東西。任何想法如何解決這個問題?注意在這個例子中它是三個變量,但它也可以是五六個或任何其他的。將幾個變量追加到Python中的列表中

volumeA = 100 
volumeB = 20 
volumeC = 10 

vol = [] 

vol.append(volume*) 
+1

它可以幫助如果你能給這是更接近你的情況的一個實例。也就是說,你是如何得到變量數目不明的變量的? – 2013-02-13 18:43:46

回答

13

您可以使用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')) 
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 2013-02-13 18:55:04

+1

變量來自其他計算(我沒有在這裏發佈)。如果我使用字典,我有問題先把它們放到字典中。 – ustroetz 2013-02-13 19:00:33

3

編輯從列表中移除理解爲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

一個理解過濾器調用讓我很難過...... – JBernardo 2013-02-13 18:36:14

+0

你的評論讓我意識到我是多麼的錯誤:D - 明天微笑是情人節。 – sotapme 2013-02-13 18:37:55

+0

爲了繼續使用'filter',切換到使用'map'更加醜陋。我認爲JBernardo的觀點是,理解已經有了一個可選的if語句內置的,所以使用它來代替'filter'。 – 2013-02-13 19:33:12

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