1. 程式人生 > >python廢話:python append的問題

python廢話:python append的問題

嘗試執行下面這段程式碼:

def appendList():
    channel = []
    channels = {}
    for i in range(10):
        channels['name'] = i
        channels['value'] = "i*"+str(i)
        channel.append(channels)        
    print channel
    
if __name__ == '__main__':
    appendList()
輸出的結果是:[{'name': 9, 'value': 'i*9'}, {'name': 9, 'value': 'i*9'}]

這段程式碼的問題是我需要的是[{'name': 0, 'value': 'i*0'}, {'name': 1, 'value': 'i*1'}......]這個字串,但是結果完全不對,程式碼檢查,看下在append之前字串是什麼樣的,程式碼更改為下面這種家如一個輸出:

def appendList():
    channel = []
    channels = {}
    for i in range(10):
        channels['name'] = i
        channels['value'] = "i*"+str(i)
        print channels
        channel.append(channels)        
    print channel
結果是:{'name': 0, 'value': 'i*0'}
{'name': 1, 'value': 'i*1'}
{'name': 2, 'value': 'i*2'}
{'name': 3, 'value': 'i*3'}
{'name': 4, 'value': 'i*4'}
{'name': 5, 'value': 'i*5'}
{'name': 6, 'value': 'i*6'}
{'name': 7, 'value': 'i*7'}
{'name': 8, 'value': 'i*8'}
{'name': 9, 'value': 'i*9'}
[{'name': 9, 'value': 'i*9'}, {'name': 9, 'value': 'i*9'}, {'name': 9, 'value': 'i*9'}, ....}]

還是錯的,但是在每次的append之前看到的要append的資料都是正常的,為什麼會出現這種情況呢,再次進行測試:

程式碼更改為下面這種,在append之前看下,append之前的channel資料是什麼樣的順便把迴圈數改小點,改為5:

def appendList():
    channel = []
    channels = {}
    for i in range(5):
        channels['name'] = i
        channels['value'] = "i*"+str(i)
        print channel
        channel.append(channels)        
    print channel
結果如下:

[]
[{'name': 1, 'value': 'i*1'}]
[{'name': 2, 'value': 'i*2'}, {'name': 2, 'value': 'i*2'}]
[{'name': 3, 'value': 'i*3'}, {'name': 3, 'value': 'i*3'}, {'name': 3, 'value': 'i*3'}]
[{'name': 4, 'value': 'i*4'}, {'name': 4, 'value': 'i*4'}, {'name': 4, 'value': 'i*4'}, {'name': 4, 'value': 'i*4'}]
[{'name': 4, 'value': 'i*4'}, {'name': 4, 'value': 'i*4'}, {'name': 4, 'value': 'i*4'}, {'name': 4, 'value': 'i*4'}, {'name': 4, 'value': 'i*4'}]

這個是出了問題了:每次迴圈結束之後的結果,都是一樣的錯誤,為什麼?去找原因,看下文件:

描述

append() 方法用於在列表末尾新增新的物件。

語法

append()方法語法:

list.append(obj)

引數

  • obj -- 新增到列表末尾的物件。

返回值

該方法無返回值,但是會修改原來的列表。

文件沒什麼幫助,現在嘗試其他解決方法,把程式碼改為如下:
def appendList():
    channel = []
    for i in range(5):
        channels = {}
        channels['name'] = i
        channels['value'] = "i*"+str(i)
        print channel
        channel.append(channels)        
    print channel
結果正常了:[]
[{'name': 0, 'value': 'i*0'}]
[{'name': 0, 'value': 'i*0'}, {'name': 1, 'value': 'i*1'}]
[{'name': 0, 'value': 'i*0'}, {'name': 1, 'value': 'i*1'}, {'name': 2, 'value': 'i*2'}]
[{'name': 0, 'value': 'i*0'}, {'name': 1, 'value': 'i*1'}, {'name': 2, 'value': 'i*2'}, {'name': 3, 'value': 'i*3'}]
[{'name': 0, 'value': 'i*0'}, {'name': 1, 'value': 'i*1'}, {'name': 2, 'value': 'i*2'}, {'name': 3, 'value': 'i*3'}, {'name': 4, 'value': 'i*4'}]
但是不知道原因,查資料看下原因:

看這裡。