python循環修改列表註意事項
阿新 • • 發佈:2017-11-10
[記錄]python循環修改列表註意事
python循環修改列表註意事項
python循環列表且需要修改列表元素時,需註意不能邊循環列表,邊修改列表,否則會導致莫名奇妙的結果錯誤。
以簡單的冒泡排序的一次排序為例
將列表[12, 3, 15, 7, 45, 33, 9, 76, 40, 56]使用冒泡算法按照從小到大排序。(僅寫一次排序過程,即找到最大的放到最後)
如果寫為:
src_list = [12, 3, 15, 7, 45, 33, 9, 76, 40, 56] for (index, value) in enumerate(src_list[:-1]): #最後一個元素不用循環 if value > src_list[index+1]: tmp = value src_list[index] = src_list[index+1] src_list[index+1] = tmp print(src_list)
以下為上面代碼的運行結果:
[3, 12, 7, 15, 33, 9, 33, 40, 76, 56]
可以發現元素33變為兩次,元素45沒了。
正確的操作方法為:用另外的方法替換循環列表這個操作,只修改列表。如:
src_list = [12, 3, 15, 7, 45, 33, 9, 76, 40, 56] for index in xrange(len(src_list)-1): #最後一個元素不用循環 if src_list[index] > src_list[index+1]: tmp = src_list[index] src_list[index] = src_list[index+1] src_list[index+1] = tmp print(src_list)
通過循環一個叠代器來代替循環列表,同時達到可以依次訪問列表元素的目的,這樣再修改列表元素就不會出錯了!
python循環修改列表註意事項