I'm using Beautiful Soup in Python to scrape some data from HTML files. In some cases, Beautiful Soup returns lists that contain both string
and NoneType
objects. I'd like to filter out all the NoneType
objects.
In Python, lists with containing NoneType
objects are not iterable, so list comprehension isn't an option for this. Specifically, if I have a list lis
containing NoneTypes
, and I try to do something like [x for x in lis (some condition/function)]
, Python throws the error TypeError: argument of type 'NoneType' is not iterable
.
As we've seen in other posts, it's straightforward to implement this functionality in a user-defined function. Here's my flavor of it:
def filterNoneType(lis): lis2 = [] for l in links: #filter out NoneType if type(l) == str: lis2.append(l) return lis2
However, I'd love to use a built-in Python function for this if it exists. I always like to simplify my code when possible. Does Python have a built-in function that can remove NoneType
objects from lists?
The easiest way to remove none from list in Python is by using the list filter() method. The list filter() method takes two parameters as function and iterator. To remove none values from the list we provide none as the function to filter() method and the list which contains none values.
It can be fixed by adding a return statement on each conditional statement and removing the print.
The None keyword is used to define a null variable or an object. In Python, None keyword is an object, and it is a data type of the class NoneType . We can assign None to any variable, but you can not create other NoneType objects. Note: All variables that are assigned None point to the same object.
I think the cleanest way to do this would be:
#lis = some list with NoneType's filter(None, lis)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With