现在有一个要求,需要你从0到100之间,去掉能被2整除,和能被3整除的数。
介绍:remove() 函数可以「删除」列表中的指定「元素」
# 1、准备数据
a = range(101)
# 2、写出条件
for i in a:
if (i%2==0) and (i%3==0):
a.remove(i)
print(a)
但会报错:
根据提示,这里我们加上一句(因为remove是关于list的函数):
a = list(a)
得到如下结果:
可以看出已经得到我们想要的结果了。
但我在对这个函数做搜集的时候,发现一个有意思的例子:
list1 = [1, 1, 1, 1, 1]
print('删除前:', list1)
for i in list1:
if i == 1:
list1.remove(i)
print('删除后:', list1)
这是这段代码运行的结果,同样是for循环,这段代码没有得到我们想要的结果,还有2个1没有被删除,但是我们之前的代码却给出了我们想要的结果,这是为什么呢?
只看这个结果我们发现,循环次数减少了,按照我们的代码,应该循环5次才对,但是它只循环了3次,实际上,每删除一个元素,列表的长度就会减一,for就会少循环一次。
那为什么我们给出的第一个例子可以呢,我猜测是第一个例子条件宽松,虽然循环减少了,但我们的要求需要的循环次数不多,剩下的循环也可以完成要求。
那如果要求的循环次数大于减少的循环次数呢?也许条件就无法完全完成。
对此,给出如下例子:
x = []
for i in range(50):
x.append(1)
for j in range(50):
x.append(2)
print(x)
可以看出这里有100个数,其中50个1,50个2,我们将1去除。我们先推算以下:去除50个1,循环至少要走50次,
print('删除前:',x)
for i in x:
if i == 1:
x.remove(i)
print('删除后:', x)
我们给出结果:
再看一下留在列表中的有多少数字:
这里我们加入m,n来看一下它具体运行了几次循环
print('删除前:',x)
m=0
n =0
for i in x:
n=n+1
if i == 1:
x.remove(i)
m=m+1
print('删除后:', x)
print('m=',m)
print('n=',n)
可以看到,一共运行了75次循环,去除了25个1,在这里我也尝试了将1,2的位置换以下,但结果却没变,这可能与for循环,或者remove的内部构造有关,我们下次再谈。
好了,今天我们通过一个运用remove的具体例子引出了在for循环中运用remove函数存在的问题,并对其有一个浅显的认知。