Search code examples
pythonlistbisect

how to see if there is a value in a list that is between two values from another list


I have two lists

a = [1, 4, 12]
b = [2, 13]

I want to know if values in list b are between two values in list a So, in this case, 2 will fall between 1 and 4. 13 will not fall between any numbers.

I have tried bisect function, but I couldn't get it work. I was able to use it with a single value and a list, but not two lists.


Solution

  • It really depends on what you want it to return. I wrote a code that will return the first pattern that it finds, but with some changes I'm sure it would not be difficult to return all combinations.

    def get_between(a, b):
        a, b = sorted(a), sorted(b)
        
        for b_value in b:
            smaller = None
            greater = None
            for a_value in a:
                if b_value > a_value:
                    smaller = a_value
                elif b_value < a_value:
                    greater = a_value
                
                if smaller and greater:
                    return f"{b_value} is between {smaller} and {greater}"
        
        return "There is no such combination"
    
    a = [1, 4, 12]
    b = [2, 13]
    print(get_between(a, b))
    

    The output on that case will be 2 is between 1 and 4, but you can adapt the return value to be whatever you want.