2011-11-14 44 views
1

所以我想通過循環某種名稱賦值語句或函數來創建變量。我想最終擁有名爲變量「t1t2t3」等我怎樣才能做到什麼如何通過迭代整數和字符串的組合來創建變量?

i = 1 
while 1: 
    ("t" + str(i)) = [0,0,0,0] 
    i = i + 1 

看起來像它會做。 (保持str("t")位於前面,使第二個字符變爲int(i)。這是爲了創建變量,以便稍後將其放入數組中,而不必在代碼中輸入它們。)我試圖製作10,000個列表的列表每個4個元素。這更清楚嗎?

+2

如果您稍後將它們放入數組中,爲什麼不直接將它們放入數組中呢? – Chris

+0

他們最初需要先定義。 – Zizma

+0

爲什麼他們需要先定義? – kindall

回答

5

雖然在技術上是可以做到你想要什麼,這是一個非常不好的做法。這正是列表(或數組)所用的用例,您應該在這裏使用它。

基於您的代碼示例,像

t = [[0] * 4 for i in xrange(10000)] 

(如大衛·艾伯在評論中提及),應爲你工作;它會創建一個包含4個元素的10000個列表。

P.S.在Python 3中,xrange函數已被重命名爲range

+0

謝謝!你和David Albers的答案都可以。有沒有辦法檢查兩者? :) – Zizma

+0

你的意思是接受?不,你只能接受一個答案。但你可以同時使用這兩種方法。 –

+0

哦,我的意思是接受。儘管如此,我也會同意。 – Zizma

5

不要嘗試。

相反,使用單一的字典保留所有的值 - 您的標題是按鍵:

my_dict = {} 
for i in range(1, 4): 
    my_dict['t%s' % i] = foo 
+0

這會創建單獨的變量嗎? – Zizma

+0

儘管這在技術上比創建單個變量更好,但我仍然無法推薦在此列表中使用字典。 –

3

t = [[0] * 4] * 10000的作品,但可能不會做你的期望。它不會創建10000個列表的列表,它將創建一個列表,其中包含10000 引用單個列表。看看會發生什麼,當你試圖開始改變內部數組中的元素:

>>> t = [[0] * 4] * 3 
>>> t 
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 
>>> t[0][0] = 1 
>>> t 
[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]] 

相反,以下是可能是你所期待:

>>> t = [[0] * 4 for _ in xrange(3)] 
>>> t 
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 
>>> t[0][0] = 1 
>>> t 
[[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 

的原因是,乘以一個列表只需創建一個更長的列表,其中包含多個對原始列表中元素的引用。這幾乎不是一個好主意,除非你知道該列表包含完全不可變的對象(如數字和字符串);這就是爲什麼在我的答案版本中使用[0] * 4中的列表乘法仍然可以,儘管[[0] * 4] * 10000中的外部列表乘法是危險的。

相關問題