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] = tmpprint(src_list)