On Fri, 10 Dec 2004 16:27:29 GMT, Steven Bethard <[EMAIL PROTECTED]> wrote:
>[EMAIL PROTECTED] wrote: >> Hello NG, >> >> I was wondering if there is a faster/nicer method (than a for loop) >> that will allow me to find the elements (AND their indices) in a list that >> verify a certain condition. For example, assuming that I have a list like: >> >> mylist = [0, 1, 1, 1, 1, 5, 6, 7, 8, 1, 10] >> >> I would like to find the indices of the elements in the list that are equal >> to 1 (in this case, the 1,2,3,4,9 elements are equal to 1). I could easily >> use a for loop but I was wondering if there is a faster method... > >Everyone has already given you the answer (enumerate in a LC or GE), I'd >just comment that it's easy enough to extend their answers to any given >condition: > > >>> def getindices(sequence, predicate): >... return [i for i, v in enumerate(sequence) if predicate(v)] >... > >>> getindices([0,1,1,1,1,5,6,7,8,1,10], bool) >[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] > >>> def equalsone(v): >... return v == 1 >... > >>> getindices([0,1,1,1,1,5,6,7,8,1,10], equalsone) >[1, 2, 3, 4, 9] > >>> def f(v): >... return pow(v, 3, 4) == 3 >... > >>> getindices([0,1,1,1,1,5,6,7,8,1,10], f) >[7] > Conclusion: Python is programmer's Lego ;-) Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list