Home > Software engineering >  Is there a better way to find index of an element without using list built-in functions?
Is there a better way to find index of an element without using list built-in functions?

Time:02-19

We can get the index of an element in a list using the .index() function. I was wondering if there's any better way to find the index without using the built-in function (of list).

Currently, I have written the following code using enumerate:

x = int(input("Enter a number to get the index:"))
l = [3,11,4,9,1,23,5]
if x in l: # I think this line is unnecessary and is increasing the time. 
    for i, val in enumerate(l):
        #Instead checking for x above can i use
        #if x == val: Don't worry about the indentation I'll fix it.   
        print(f"Index of {x} is {i}.")
else:
    print("Item not found.")

So, is there a better way(in terms of time taken) to accomplish this? Thanks for your time and knowledge.

CodePudding user response:

use list comprehension in python

l = [3, 11, 4, 9, 1, 23, 5, 11]
indexes = [index for index in range(len(l)) if l[index] == 11]

output:

[1, 7]

use numpy for finding the matching indices.

l = [3, 11, 4, 9, 1, 23, 5, 11]
np_array = np.array(l)
item_index = np.where(np_array == 11)
print (item_index)

Numpy is efficient:

import random
import time

import numpy as np

limit = 10 ** 7
l = [None] * limit
for i in range(limit):
    l[i] = random.randint(0, 1000000)

start = time.time()
np_array = np.array(l)
item_index = np.where(np_array == 11)
print('time taken by numpy', time.time() - start)

start = time.time()
for index, value in enumerate(l):
    if (value == 11):
        pass
print('time taken by enumerate',time.time() - start)

Output:

time taken by numpy 0.9375550746917725
time taken by enumerate 1.4508612155914307
  • Related