I am receiving Points in large number from a sensor in real-time. However, I just need 4 categories of points, i.e., top_left, top_right, bottom_left, and bottom_right. I have an if-elif statement in Python 2 as follows:
from random import random, randint
# points below are received from sensor. however, 
# here in this post I am creating it randomly.
points = [Point(randint(0, i), random(), random(), random()) for i in range(100)] 
# 4 categories
top_left, top_right, bottom_left, bottom_right = None, None, None, None
for p in points:
    if p.id == 5:
        top_left = p
    elif p.id == 7:
        top_right = p
    elif p.id == 13:
        bottom_left = p
    elif p.id == 15:
        bottom_right = p
print top_left.id, top_left.x, top_left.y, top_left.z # check variable
Each Point has an id and x, y, z parameters. This is an inbuilt class. I am just showing a sample class here.
class Point():
    def __init__(self, id, x, y, z):
        self.id = id
        self.x = x
        self.y = y
        self.z = z
Is there any efficient way considering runtime of achieving the same.
Answer: I am adding the results which I got from the answers. It seems that the answer by Elis Byberi is fastest among all. Below is my test code:
class Point():
    def __init__(self, id, x, y, z):
        self.id = id
        self.x = x
        self.y = y
        self.z = z
from random import random, randint
n = 1000
points = [Point(randint(0, i), random(), random(), random()) for i in range(n)]
def method1():
    top_left, top_right, bottom_left, bottom_right = None, None, None, None
    for p in points:
        if p.id == 5:
            top_left = p
        elif p.id == 7:
            top_right = p
        elif p.id == 13:
            bottom_left = p
        elif p.id == 15:
            bottom_right = p
    #print top_left.id, top_left.x, top_left.y, top_left.z
def method2():
    categories = {
        5: None,  # top_left
        7: None,  # top_right
        13: None,  # bottom_left
        15: None  # bottom_right
    }
    for p in points:
        categories[p.id] = p
    top_left = categories[5]
    #print top_left.id, top_left.x, top_left.y, top_left.z
def method3():
    name_to_id = {'top_left': 5, 'top_right': 7, 'bottom_left': 13, 'bottom_right': 15}
    ids = [value for value in name_to_id.values()]
    bbox = {id: None for id in ids}
    for point in points:
        try:
            bbox[point.id] = Point(point.id, point.x, point.y, point.z)
        except KeyError:  # Not an id of interest.
            pass
    top_left = bbox[name_to_id['top_left']]
    #print top_left.id, top_left.x, top_left.y, top_left.z
from timeit import Timer
print 'method 1:', Timer(lambda: method1()).timeit(number=n)
print 'method 2:', Timer(lambda: method2()).timeit(number=n)
print 'method 3:', Timer(lambda: method3()).timeit(number=n)
See Below the returned output:
ravi@home:~/Desktop$ python test.py 
method 1: 0.174991846085
method 2: 0.0743980407715
method 3: 0.582262039185
 
     
     
    