Velocity Reviews > Find Items & Indices In A List...

# Find Items & Indices In A List...

andrea.gavana@agip.it
Guest
Posts: n/a

 12-10-2004
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...

Thanks for every suggestion.

Andrea.
------------------------------------------------------------------------------------------------------------------------------------------
Message for the recipient only, if received in error, please notify the

kaerbuhez
Guest
Posts: n/a

 12-10-2004
<(E-Mail Removed)> a écrit dans le message de news:
http://www.velocityreviews.com/forums/(E-Mail Removed)...
> 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).

PythonWin 2.4 (#60, Nov 30 2004, 11:49:19) [MSC v.1310 32 bit (Intel)] on
win32.
Portions Copyright 1994-2004 Mark Hammond ((E-Mail Removed)) - see
>>> mylist = [0, 1, 1, 1, 1, 5, 6, 7, 8, 1, 10]
>>> [i for i, j in enumerate(mylist) if j==1]

[1, 2, 3, 4, 9]
>>>

Ola Natvig
Guest
Posts: n/a

 12-10-2004
(E-Mail Removed) 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...
>
> Thanks for every suggestion.
>
> Andrea.
> ------------------------------------------------------------------------------------------------------------------------------------------
> Message for the recipient only, if received in error, please notify the
>
>

You could do a list comprehension /generator expression. Like this:
[i for i in range(len(mylist)) if mylist[i] == 1]

--
--------------------------------------
Ola Natvig <(E-Mail Removed)>
infoSense AS / development

Bengt Richter
Guest
Posts: n/a

 12-10-2004
On Fri, 10 Dec 2004 16:01:26 +0100, (E-Mail Removed) 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...
>
>Thanks for every suggestion.
>

One way:

>>> mylist = [0, 1, 1, 1, 1, 5, 6, 7, 8, 1, 10]
>>> [i for i,v in enumerate(mylist) if v==1]

[1, 2, 3, 4, 9]

Regards,
Bengt Richter

Steven Bethard
Guest
Posts: n/a

 12-10-2004
(E-Mail Removed) 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]

Steve

Bengt Richter
Guest
Posts: n/a

 12-10-2004
On Fri, 10 Dec 2004 16:27:29 GMT, Steven Bethard <(E-Mail Removed)> wrote:

>(E-Mail Removed) 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