2013-01-12 43 views
0

這是我的代碼 我得到了兩個不同的輸出[2]和[2,4,6],有人可以做一些解釋嗎?列表的兩種迭代有什麼區別

list = [1,2,3] 
def getdouble(l): 
    result = [] 
    for i in l : 
     i = i * 2 
     result.append(i) 
    return result 

print getdouble(list) 

def getdouble_v2 (l): 
    result = [] 
    for i in range(len(l)): 
     l[i] = l[i] * 2 
     result.append(l[i]) 
    return result 

print getdouble_v2(list) 
+3

我得到'[2,4,6]'和'[2,4,6]'。但區別在於第二個也修改了原始列表。 –

回答

2

獲得輸出聲明的唯一方法是如果文件中的縮進被破壞。確認您沒有使用python -tt混合空格和製表符。

0

這兩個函數都返回相同輸入列表的相同result列表。然而,第二個功能也在l[i] = l[i] * 2這一行中修改了原始列表。第一個功能沒有。

因此,對於第一個函數的結果是:

l = [1,2,3] 
result = [2,4,6] 

第二功能結果:

l = [2,4,6] 
result = [2,4,6] 
+0

我不想嘗試多次運行第二次,而不重新初始化l :) – root

+0

@root的確,這是真的。 – pemistahl

0

您正在使用4個空格縮進除了線

 return result 

它由選項卡縮進。這是不幸的,因爲你的編輯器顯示選項卡爲4個空格,但是Python將其視爲8位,所以代碼看起來像這樣到Python

list = [1,2,3] 
def getdouble(l): 
    result = [] 
    for i in l : 
     i = i * 2 
     result.append(i) 
     return result 

所以你看,第一項追加到後它返回列表