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?
I think the cleanest way to do this would be:
#lis = some list with NoneType's
filter(None, lis)