Search code examples
pythonidioms

Python idiom to return first item or None


I'm calling a bunch of methods that return a list. The list may be empty. If the list is non-empty, I want to return the first item; otherwise, I want to return None. This code works:

def main():
    my_list = get_list()
    if len(my_list) > 0:
        return my_list[0]
    return None

but it seems to me that there should be a simple one-line idiom for doing this. Is there?


Solution

  • Python 2.6+

    next(iter(your_list), None)
    

    If your_list can be None:

    next(iter(your_list or []), None)
    

    Python 2.4

    def get_first(iterable, default=None):
        if iterable:
            for item in iterable:
                return item
        return default
    

    Example:

    x = get_first(get_first_list())
    if x:
        ...
    y = get_first(get_second_list())
    if y:
        ...
    

    Another option is to inline the above function:

    for x in get_first_list() or []:
        # process x
        break # process at most one item
    for y in get_second_list() or []:
        # process y
        break
    

    To avoid break you could write:

    for x in yield_first(get_first_list()):
        x # process x
    for y in yield_first(get_second_list()):
        y # process y
    

    Where:

    def yield_first(iterable):
        for item in iterable or []:
            yield item
            return