Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python return False if list is empty

Tags:

python

In one coding example i saw the following code snippet that returns True if the list is empty and False if not

return a == []

the reason for that is to avoid writing

if a:
    return False
else:
    return True

In a real example with multiple thousands of entries, is there any speed difference i should be aware of?

like image 662
user1767754 Avatar asked Sep 11 '16 06:09

user1767754


People also ask

Does an empty list return false Python?

Empty lists are considered False in Python, hence the bool() function would return False if the list was passed as an argument.

Which function in list returns false when the list is empty?

The isEmpty () method returns the Boolean value 'true' if this list contains no elements, else it returns false.

Does empty list evaluate to false?

If the list is empty, it evaluates to False , so the else clause is executed.


2 Answers

No. There is no speed difference in either case. Since in both cases the length of the list is checked first. In the first case, the len of a is compared with the len of [] before any further comparison. Most times the len should differ, so the test just returns immediately.

But the more pythonic way would be to just return not a or convert it using bool and then return it:

return not a

# or 

return not bool(a)
like image 107
Musa Rasheed Avatar answered Oct 02 '22 16:10

Musa Rasheed


If you're asking which method would faster if put in a function(hence the return's), then I used the timeit module to do a little testing. I put each method in a function, and then ran the program to see which function ran faster. Here is the program:

import timeit

def is_empty2():
    a = []
    if a:
        return True
    else:
        return False

def is_empty1():
    a = []
    return a == []


print("Time for method 2:")
print(timeit.timeit(is_empty2))
print("")
print("Time for method 1:")
print(timeit.timeit(is_empty1))

I ran the program five times, each time recording the speed for each function. After getting an average for each time, here is what I came up with:

method one speed(milliseconds): 0.2571859563796641
-----------------------------   ------------------
method two speed(milliseconds): 0.2679253742685615

At least from my testing above, the first method you described in your question was slightly faster than the second method. Of course those numbers above could drastically change depending on what exactly is inside those two functions.

I agree however, with what Cdarke said in the comments. Go with the one that is the most clear and concise. Don't go with one option solely based upon its speed. in the words of Guido van Rosom: Readability counts.

like image 27
Christian Dean Avatar answered Oct 02 '22 17:10

Christian Dean