445,742 Members | 1,044 Online
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
5 Replies

 P: n/a 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 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 thatverify 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 equalto 1 (in this case, the 1,2,3,4,9 elements are equal to 1). I could easilyuse 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 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'djust comment that it's easy enough to extend their answers to any givencondition: 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.