i am refreshing my python (2.7) and i am discovering iterators and generators. As i understood, they are an efficient way of navigating over values without consuming too much memory. So the following code do some kind of logical indexing on a list: removing the values of a list L that triggers a False conditional statement represented here by the function f.
I am not satisfied with my code because I feel this code is not optimal for three reasons:
- I read somewhere that it is better to use a for loop than a while loop. However, in the usual - for i in range(10), i can't modify the value of 'i' because it seems that the iteration doesn't care.
- Logical indexing is pretty strong in matrix-oriented languages, and there should be a way to do the same in python (by hand granted, but maybe better than my code). 
- Third reason is just that i want to use generator/iterator on this example to help me understand. 
Third reason is just that i want to use generator/iterator on this example to help me understand.
TL;DR : Is this code a good pythonic way to do logical indexing ?
#f string -> bool
def f(s):
    return 'c' in s
L=['','a','ab','abc','abcd','abcde','abde']  #example
length=len(L)
i=0
while i < length:
    if not f(L[i]): #f is a conditional statement (input string output bool)
        del L[i]
        length-=1 #cut and push leftwise
    else:
        i+=1
    print 'Updated list is :', L
    print length
 
     
     
     
     
     
     
    