Reputation: 5334
I am iterating over a list and I want to print out the index of the item if it meets a certain condition. How would I do this?
Example:
testlist = [1,2,3,5,3,1,2,1,6]
for item in testlist:
if item == 1:
print position
Upvotes: 188
Views: 647344
Reputation: 5780
What about the following?
print(testlist.index(element))
If you are not sure whether the element to look for is actually in the list, you can add a preliminary check, like
if element in testlist:
print(testlist.index(element))
or
print(testlist.index(element) if element in testlist else None)
or the "pythonic way", which is somewhat less readable, but is more efficient,
try:
print(testlist.index(element))
except ValueError:
pass
Upvotes: 203
Reputation: 1
What about trying
list_ = ["pen", "david"]
for i in list_:
list_.index(i)
The code literally takes each object and parses the postion of i
Additionally if you wanted to check a specific element you could try:
list_ = ["pen", "david"]
for i in list_:
if list_.index(i) == 0:
print(i, list_.index(i))
Upvotes: -1
Reputation: 11
l = list(map(int,input().split(",")))
num = int(input())
for i in range(len(l)):
if l[i] == num:
print(i)
Explanation:
Taken a list of integer "l" (separated by commas) in line 1. Taken a integer "num" in line 2. Used for loop in line 3 to traverse inside the list and checking if numbers(of the list) meets the given number(num) then it will print the index of the number inside the list.
Upvotes: 1
Reputation: 1
testlist = [1,2,3,5,3,1,2,1,6]
num = 1
for item in range(len(testlist)):
if testlist[item] == num:
print(item)
Upvotes: -1
Reputation: 494
Just to illustrate complete example along with the input_list
which has searies1
(example: input_list[0]) in which you want to do a lookup of series2
(example: input_list[1]) and get indexes of series2 if it exists in series1.
Note: Your certain condition
will go in lambda expression if conditions are simple
input_list = [[1,2,3,4,5,6,7],[1,3,7]]
series1 = input_list[0]
series2 = input_list[1]
idx_list = list(map(lambda item: series1.index(item) if item in series1 else None, series2))
print(idx_list)
output:
[0, 2, 6]
Upvotes: 0
Reputation: 51
Try the below:
testlist = [1,2,3,5,3,1,2,1,6]
position=0
for i in testlist:
if i == 1:
print(position)
position=position+1
Upvotes: 5
Reputation: 61
Here is another way to do this:
try:
id = testlist.index('1')
print testlist[id]
except ValueError:
print "Not Found"
Upvotes: 6
Reputation: 112366
Hmmm. There was an answer with a list comprehension here, but it's disappeared.
Here:
[i for i,x in enumerate(testlist) if x == 1]
Example:
>>> testlist
[1, 2, 3, 5, 3, 1, 2, 1, 6]
>>> [i for i,x in enumerate(testlist) if x == 1]
[0, 5, 7]
Update:
Okay, you want a generator expression, we'll have a generator expression. Here's the list comprehension again, in a for loop:
>>> for i in [i for i,x in enumerate(testlist) if x == 1]:
... print i
...
0
5
7
Now we'll construct a generator...
>>> (i for i,x in enumerate(testlist) if x == 1)
<generator object at 0x6b508>
>>> for i in (i for i,x in enumerate(testlist) if x == 1):
... print i
...
0
5
7
and niftily enough, we can assign that to a variable, and use it from there...
>>> gen = (i for i,x in enumerate(testlist) if x == 1)
>>> for i in gen: print i
...
0
5
7
And to think I used to write FORTRAN.
Upvotes: 305
Reputation: 3417
Why complicate things?
testlist = [1,2,3,5,3,1,2,1,6]
for position, item in enumerate(testlist):
if item == 1:
print position
Upvotes: 1
Reputation: 89
I think that it might be useful to use the curselection() method from thte Tkinter library:
from Tkinter import *
listbox.curselection()
This method works on Tkinter listbox widgets, so you'll need to construct one of them instead of a list.
This will return a position like this:
('0',) (although later versions of Tkinter may return a list of ints instead)
Which is for the first position and the number will change according to the item position.
For more information, see this page: http://effbot.org/tkinterbook/listbox.htm
Greetings.
Upvotes: 1
Reputation: 9
testlist = [1,2,3,5,3,1,2,1,6]
for id, value in enumerate(testlist):
if id == 1:
print testlist[id]
I guess that it's exacly what you want. ;-) 'id' will be always the index of the values on the list.
Upvotes: -2
Reputation: 29450
Use enumerate:
testlist = [1,2,3,5,3,1,2,1,6]
for position, item in enumerate(testlist):
if item == 1:
print position
Upvotes: 43
Reputation:
If your list got large enough and you only expected to find the value in a sparse number of indices, consider that this code could execute much faster because you don't have to iterate every value in the list.
lookingFor = 1
i = 0
index = 0
try:
while i < len(testlist):
index = testlist.index(lookingFor,i)
i = index + 1
print index
except ValueError: #testlist.index() cannot find lookingFor
pass
If you expect to find the value a lot you should probably just append "index" to a list and print the list at the end to save time per iteration.
Upvotes: 2
Reputation: 3569
for i in xrange(len(testlist)):
if testlist[i] == 1:
print i
xrange instead of range as requested (see comments).
Upvotes: 11