2017-01-25 63 views
0

我需要創建一個包含一系列子列表的ORDERED列表。但我不知道如何迭代已知變量。python:動態創建並執行現有的變量名

下面是一個例子。比方說,我有以下子列表:

list_0 = [0, 1, 2] 
list_1 = [3, 4, 5, 6] 
list_2 = [7, 8, 9] 

我試圖名單追加到一個更大的列表list_all

list_all = [ [0, 1, 2], [3, 4, 5, 6], [7, 8, 9] ] 

所以我想通過變量名進行迭代,但我不確定這是可能的嗎?

list_all = [list_{num}.format(num=i) for i in range(3)] 
# SyntaxError 

這似乎是工作,如果list_all包含已知變量的字符串,但我不需要變量顯然,我需要這些變量中的數據。

list_all = ['list_{num}'.format(num=i) for i in range(3)] 
print list_all 
# ['list_0', 'list_1', 'list_2'] 

所以我想問題是我該如何動態創建和執行python變量名?我需要這樣做,因爲列表數量隨着每個用例而變化。

+0

你應該do是使用列表(或其他數據結構)而不是命名變量「foo_#」。然後你可以非常簡單自然地遍歷你的列表來做你想做的事情。 – dsh

+2

不要創建變量'list_0','list_1',但是列表或字典'list [0]','list [1]' – furas

回答

1

如果您確實需要,您可以從globals()locals()字典中獲取變量及其值。

>>> list_0 = [0, 1, 2] 
>>> list_1 = [3, 4, 5, 6] 
>>> list_2 = [7, 8, 9] 
>>> [globals()["list_{}".format(i)] for i in range(3)] 
[[0, 1, 2], [3, 4, 5, 6], [7, 8, 9]] 

不過,幾乎可以肯定,這將是一個更好的主意,各列表保存爲list_all部分開始,並訪問他們爲list_all[0]等來代替list_0

>>> list_all = [] 
>>> list_all.append([0, 1, 2]) 
>>> list_all.append([3, 4, 5, 6]) 
>>> list_all.append([7, 8, 9]) 
>>> list_all[0] 
[0, 1, 2] 
+0

偉大的答案謝謝!我也想出了'eval()'也適用於這種情況 –