Reputation: 7709
For example I have a sentence
"He is so .... cool!"
Then I remove all the punctuation and make it in a list.
["He", "is", "so", "", "cool"]
How do I remove or ignore the empty string?
Upvotes: 24
Views: 95024
Reputation: 377
lst = ["He", "is", "so", "", "cool"]
lst = list(filter(str.strip, lst))
Upvotes: 0
Reputation: 6080
Python 3 returns an iterator
from filter
, so should be wrapped in a call to list()
str_list = list(filter(None, str_list)) # fastest
Upvotes: 1
Reputation: 50975
I'll give you the answer to the question you should have asked -- how to avoid the empty string altogether. I assume you do something like this to get your list:
>>> "He is so .... cool!".replace(".", "").split(" ")
['He', 'is', 'so', '', 'cool!']
The point is that you use .split(" ")
to split on space characters. However, if you leave out the argument to split
, this happens:
>>> "He is so .... cool!".replace(".", "").split()
['He', 'is', 'so', 'cool!']
Quoth the docs:
If sep is not specified or is None, a different splitting algorithm is applied: runs of consecutive whitespace are regarded as a single separator, and the result will contain no empty strings at the start or end if the string has leading or trailing whitespace.
So you really don't need to bother with the other answers (except Blender's, which is a totally different approach), because split can do the job for you!
Upvotes: 5
Reputation: 32300
You can use filter
, with None
as the key function, which filters out all elements which are False
ish (including empty strings)
>>> lst = ["He", "is", "so", "", "cool"]
>>> filter(None, lst)
['He', 'is', 'so', 'cool']
Note however, that filter
returns a list in Python 2, but a generator in Python 3. You will need to convert it into a list in Python 3, or use the list comprehension solution.
False
ish values include:
False
None
0
''
[]
()
# and all other empty containers
Upvotes: 52
Reputation: 12077
You can filter it like this
orig = ["He", "is", "so", "", "cool"]
result = [x for x in orig if x]
Or you can use filter
. In python 3 filter
returns a generator, thus list()
turns it into a list. This works also in python 2.7
result = list(filter(None, orig))
Upvotes: 25
Reputation: 831
You can do this with a filter
.
a = ["He", "is", "so", "", "cool"]
filter(lambda s: len(s) > 0, a)
Upvotes: -1
Reputation: 298048
You can use a list comprehension:
cleaned = [x for x in your_list if x]
Although I would use regex to extract the words:
>>> import re
>>> sentence = 'This is some cool sentence with, spaces'
>>> re.findall(r'(\w+)', sentence)
['This', 'is', 'some', 'cool', 'sentence', 'with', 'spaces']
Upvotes: 7
Reputation: 26040
You can filter out empty strings very easily using a list comprehension:
x = ["He", "is", "so", "", "cool"]
x = [str for str in x if str]
>>> ['He', 'is', 'so', 'cool']
Upvotes: 1
Reputation: 133494
>>> from string import punctuation
>>> text = "He is so .... cool!"
>>> [w.strip(punctuation) for w in text.split() if w.strip(punctuation)]
['He', 'is', 'so', 'cool']
Upvotes: 2