Find Items & Indices In A List...

A

andrea.gavana

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.
 
K

kaerbuhez

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).

List comprehension is your friend:

PythonWin 2.4 (#60, Nov 30 2004, 11:49:19) [MSC v.1310 32 bit (Intel)] on
win32.
Portions Copyright 1994-2004 Mark Hammond ([email protected]) - see
'Help/About PythonWin' for further copyright information.
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]
 
O

Ola Natvig

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.

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

Bengt Richter

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
 
S

Steven Bethard

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:
.... 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
 
B

Bengt Richter

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:
... 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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,564
Members
45,039
Latest member
CasimiraVa

Latest Threads

Top