Sean
Sean

Reputation: 5334

How to get item's position in a list?

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

Answers (15)

mmj
mmj

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

JawsChamp
JawsChamp

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

Shashank Kumar Pandey
Shashank Kumar Pandey

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

Shivam Raj
Shivam Raj

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

ravibeli
ravibeli

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

B Prashantkumar
B Prashantkumar

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

Phil Rankin
Phil Rankin

Reputation: 61

Here is another way to do this:

try:
   id = testlist.index('1')
   print testlist[id]
except ValueError:
   print "Not Found"

Upvotes: 6

Charlie Martin
Charlie Martin

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

Abhishek
Abhishek

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

xXAngelJinXx
xXAngelJinXx

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

malekcellier
malekcellier

Reputation: 187

[x for x in range(len(testlist)) if testlist[x]==1]

Upvotes: 4

Leonardo
Leonardo

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

zdan
zdan

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

user44484
user44484

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

jakber
jakber

Reputation: 3569

for i in xrange(len(testlist)):
  if testlist[i] == 1:
    print i

xrange instead of range as requested (see comments).

Upvotes: 11

Related Questions