By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,742 Members | 1,044 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,742 IT Pros & Developers. It's quick & easy.

Find Items & Indices In A List...

P: n/a
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
sender and read http://www.eni.it/disclaimer/
Jul 18 '05 #1
Share this Question
Share on Google+
5 Replies


P: n/a
<an***********@agip.it> a écrit dans le message de news:
ma**************************************@python.or g...
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 (mh******@skippinet.com.au) - 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]


Jul 18 '05 #2

P: n/a
an***********@agip.it 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
sender and read http://www.eni.it/disclaimer/


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

--
--------------------------------------
Ola Natvig <ol********@infosense.no>
infoSense AS / development
Jul 18 '05 #3

P: n/a
On Fri, 10 Dec 2004 16:01:26 +0100, an***********@agip.it 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
Jul 18 '05 #4

P: n/a
an***********@agip.it 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
Jul 18 '05 #5

P: n/a
On Fri, 10 Dec 2004 16:27:29 GMT, Steven Bethard <st************@gmail.com> wrote:
an***********@agip.it 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
Jul 18 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.