nums=[4,3,6,16,8,2,64]
nums.sort()
for m in nums:
print("2:", m)
nums.remove(m)
m = m * m
print("3:", m)
这个的运行结果是
2: 2
3: 4
2: 4
3: 16
2: 8
3: 64
2: 64
3: 4096
第五行的结果我认为应该是2:16,请问大家是怎么回事
这段代码首先将列表 nums 进行排序,然后使用一个 for 循环来遍历排序后的列表。在每次循环中,它会将列表中的每一项输出到屏幕上,然后将当前项从列表中移除,最后将当前项的平方值输出到屏幕上。
假设原始的列表是这样的:nums = [4, 3, 6, 16, 8, 2, 64]。那么在执行完排序操作之后,列表的内容变为:nums = [2, 3, 4, 6, 8, 16, 64]。
然后,在第一次循环中,将输出当前列表中的第一个项 2,然后将这一项从列表中移除,最后将其平方值 2 * 2 = 4 输出到屏幕上。列表中剩下的项为:nums = [3, 4, 6, 8, 16, 64]。
后面反复这个过程
运行结果为
2: 2
3: 4
2: 4
3: 16
2: 8
3: 64
2: 64
3: 4096
sort()对列表进行升序排序,列表排序后是[2,3,4,6,8,16,64]。
每次循环会取列表的元素,首先输出2:原值,再输出3:平方,所以第一次循环输出:2:2,3:4。
每次循环会remove当前迭代的元素,导致原来的列表的元素前移,for循环按列表索引进行元素访问,下次迭代会就会导致跳过下一个元素,所以最终循环迭代的只是原列表排序后的第1、3、5...个元素,也就是2,4,8,64。
加了remove 之后列表只访问2 4 8 64,所以应该是 (2 4)(4 16)(8 64)(64 4096)
怎么可能,那数组中的3怎么没有了呢,你能理解3没有了,应该就能理解16页没有了。数组循环时内部是在不断循环下标的,也就是第一次取下标为0的值,第二次取下标为1的值,就算你中间移除一些值,它还是按这个顺序循环的,所以16的那个是被跳过了,3同理。