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'}]
但是不知道原因,查資料看下原因:
看這裡。