Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Native Python function to remove NoneType elements from list?

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?

like image 641
solvingPuzzles Avatar asked Jan 09 '13 06:01

solvingPuzzles


People also ask

How do I remove a NoneType from a list in Python?

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.

How do I remove print none in Python?

It can be fixed by adding a return statement on each conditional statement and removing the print.

How do you handle none objects in Python?

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.


1 Answers

I think the cleanest way to do this would be:

#lis = some list with NoneType's filter(None, lis) 
like image 155
Abs Avatar answered Oct 17 '22 09:10

Abs