源代码:
import random
ls =[random.randint(1,100)for i inrange(50)]print(ls)for i in ls:if i%2==1:print(i)
ls.remove(i)print(ls)
问题就是:编写程序,生成包含50个随机整数的列表,然后删除其中所有的奇数。
随机生成的列表内容是这样的。
[29,32,31,22,56,20,19,14,29,82,40,60,19,44,82,59,13,45,4,5,21,13,30,79,28,73,10,60,74,84,92,4,20,78,90,70,16,72,38,30,70,95,89,22,26,22,44,36,57,9]
输出的结果是这样的,其中还是有一些没有清理干净的奇数。
[32,22,56,20,14,82,40,60,44,82,4,21,13,30,28,10,60,74,84,92,4,20,78,90,70,16,72,38,30,70,89,22,26,22,44,36,9]
这样的话,就是代码的问题了,所以矛头都指向了一处,那就是remove函数的使用。
remove函数:该方法没有返回值但是会移除列表中的某个值的第一个匹配项。
这是另一个测试对象:
生成的列表:
[57,79,97,70,85,36,2,46,75,99,95,34,31,71,95,10,69,20,16,70,72,4,43,22,32,4,21,75,60,25,12,66,61,92,51,61,33,16,68,9,92,63,79,37,46,32,67,13,56,63]
打印输出的元素(中间涉及元素的删除)
579785246759531956916707244332421602566615133689633732675663
删除后的列表,显然是没有清理干净。
[79,70,36,2,46,99,34,71,10,20,16,70,72,4,22,32,4,75,60,12,66,92,61,16,68,92,79,46,32,13,56]
从以上的测试结果看出,举例来说,由于第一个元素57是奇数,remove之后,57被删除之后,57就不会第一位了,这个时
候79是成为列表的第一位,但是遍历时候的索引位置会继续往下找,也就是说循环认为第一个数已经判断过了,但是这个时
候第一个数字和原来的第一个数字不是同一个了,这个时候就会出现奇数没有被删除的现象。
解决方法不止一种,由于自己是小白,给出一种很low的解决方案:
import random
ls =[random.randint(1,100)for i inrange(50)]
resultls =[]for i in ls:if i%2==0:
resultls.append(i)print(resultls)
将所有的偶数装到另一个列表中就能实现“类似删除的效果”