python list.remove(),del()和filter & lambda
面试题之中的一个。
下面代码能执行吗?
l = [1,2,3,4,5]
for i in range(0,len(l)):
    print i
    if l[i] % 2 == 0:
        del l[i]
print l结果:Traceback (most recent call last):
  File "D:\1.py", line 3, in <module>
    if l[i] % 2 == 0:
IndexError: list index out of range
啊。由于随着del()语句的执行。list的元素越来越少。可是for已经定了[0,5):
i = 0,l[i] = 1不是偶数跳过
i = 1。l[i] = 2是偶数。l = [1,3,4,5]
i = 2,l[i] = 4是偶数。l=[1,3,5]
i = 3,l[i] 越界了,list index out of range。
ll = [1,2,3,4,5]
for i in ll:
    if i % 2 == 0:
        ll.remove(i)
print ll结果:>>> [1, 3, 5] >>>啊。这段代码就没上述的问题。list有多少就取多少。
用filter()和lambda实现上面的功能:
print filter(lambda e:e%2!=0,ll)结果:
>>> [1, 3, 5] >>>啊,就这么简单。
说下filter()吧:
filter(function,list),把list中的元素一个个丢到function中。Return True的元素组成一个new list。
ll = [1,2,3,4,5]
def func(x):
    return x % 2 != 0
print filter(func,ll)
匿名函数,lambda a:b,当中a表示參数。b表示返回值。
上面就是lambda e : e%2 != 0 。
总结:
1、循环list的时候,最好用for i in list:。降低由于del()放下不易察觉的失误。
2、没事用用filter()和lambda,感觉挺装逼的。(这算什么总结嘛。)
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号