1. 程式人生 > >python循環修改列表註意事項

python循環修改列表註意事項

[記錄]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循環修改列表註意事項