2012-01-26 32 views
0

我有5只列出了一個名爲l1l2l3l4l5如果我使用for循環來生成一個字符串列表,我該如何創建一個變量列表,而不是一個字符串列表?

l1 = [1,2] 
l2 = [3,4] 
l3 = [5,6] 
l4 = [7,8] 
l5 = [9,10] 

如果我想創造一個新的對象A作爲一個列表的列表,我可以很容易地做到這一點:

A = [] 
A.append(l1) 
A.append(l2) 
A.append(l3) 

等等......和A看起來像這樣:

[[1,2],[3,4],[5,6],[7,8],[9,10]] 

但是我可以使用for循環來使這更容易嗎?

我可以試試:

A = [] 
    For q in range(1,6): 
    temp = 'l' + str(q) 

我該怎麼做? temp是一個字符串,它將來自for循環的數字「l」基本連接起來。

所以看起來'l1''l2''l3'

但是,如果使用

A.append(temp) 

循環內,輸出列表看起來像一個字符串列表['l1', 'l2', 'l3', ....]

我想我因爲我不知道如何取一個字符串,然後說,我不想要字符串'l1',我想返回變量列表l1。我想我想弄明白,如果不知何故,我在我的全局名稱空間變量名爲l1,l2,l3一路l10000,我怎麼可以編寫代碼來創建一個新的列表,所有列表的列表l1,l2,l3等等。

+2

我建議只用'A = [l1,l2,l3,l4,l5,l6]'。不能比這更簡潔。 – Kevin

+3

Python中沒有指針。我不確定你的意圖;你能澄清一下嗎? – Makoto

+3

令人欽佩的是,迄今爲止,所有給予誘惑提及某種方式的人都可以這樣做,他們也表示你不應該這樣做。請傾聽反推薦信息,並改用其他數據結構。如果「l」之後的數字是有意義的,那麼以更直接的方式連接到數據是值得的(如果不是,那麼無論如何也沒有關係)。 – DSM

回答

1

如果您有更多列表,請嘗試將它們添加到創建時的「列表列表」中。

否則,在其他的答案說,創建列表:

A = [l1,l2,l3,l4,l5] 
+1

他要求列出清單,而不是一個長列表。 – Duncan

+0

沒錯。 Mea culpa。 – Gregor

5

對於5只列出剛剛創建列表:

A = [l1, l2, l3, l4, l5] 

你可以用一個循環做到這一點,但是這將是亂。例如:

A = [ vars()['l'+str(id)] for id in range(1,6) ] 

更好的辦法是將您的列表存儲在類似於列表或字典的東西中。這使他們遠離其他變量的方式,所以你可以很容易地將他們引用爲一個組。

+0

謝謝鄧肯。這非常有幫助。我會閱讀vars()文檔,但我想我可以看到它會使用這個。顯然對於小列表,我不會使用for循環來生成這個列表的列表,但如果我有l1到l10000,那麼我不想這樣做! –

+1

@RobertTsai,我無法理解你將如何生成10000個單獨的變量,而無需將它們放入列表中。 –

+2

請不要使用這樣的vars()。採取鄧肯的最後建議:首先使用單個列表。 –

-3

另一個哈克的方式,不建議當然是:

l0 = [1,] 
l1 = [2,] 
l2 = [3,] 

why_do_this = "[" 
for i in xrange(3): 
    why_do_this += 'l%s,'%i 
why_do_this+=']' 
result=eval(why_do_this) 
print result 

[[1], [2], [3]] 
+1

-1:不要給出不好的建議,即使你把它標爲不好的建議。 –

+0

這是一些可怕的編碼 – juliomalegria

0

這聽起來像什麼是你想要使用具有匹配的一個值的字符串在運行時動態地引用列表對象的幾個實例你的變量名稱。這通常是一個不好的主意,我無法理解爲什麼你需要這樣做。

問題是您正試圖遍歷實際不存在的列表。爲了說明這一點,想象一下,如果你被告知開車去一系列地點而沒有給出指示這些地點(只有建築物的名稱,五角大樓,西爾斯大廈等),而且它們之間甚至沒有任何道路。道路不會自己建造,也不會建立數據結構。

相關問題