Since you have nested lists (and strings within), you need to use nested list comprehensions for this (the most outer for the sublists, the inner for the strings, and the most-inner for the characters), and join
with the ' '
to get the result you want:
data = [['we', '\n\n', 'will', 'pray', 'and', 'hope', 'for', 'the', 'best'],
['though', '10/3/2011', 'it', 'may', 'not', '\n\n', 'make', 'landfall', 'all', 'week', '2 000 €', 'if', 'it', 'follows', 'that', '•', 'track'],
['heavy', 'rains', 'capable', 'of', 'producing', 'life threatening', 'flash', '•', 'floods', '\n\n', 'are', 'possible']]
new_data = [' '.join(i for i in sublist if all(j.isalpha() or j == ' ' for j in i)) for sublist in data]
print(new_data)
Output:
['we will pray and hope for the best',
'though it may not make landfall all week if it follows that track',
'heavy rains capable of producing life threatening flash floods are possible']
And as it was pointed out to me by @RonaldAaronson, in case you want to filter out the non-alphanumeric (+space) characters from each string, and not completely ignore strings with some bad characters in them, you can use this instead:
data = [['we', '\n\n', 'will', 'pray', 'and', 'hope', 'for', 'the', 'best.'],
['though', '10/3/2011', 'it', 'may', 'not', '\n\n', 'make', 'landfall', 'all', 'week', '2 000 €', 'if', 'it', 'follows', 'that', '•', 'track?'],
['heavy', 'rains', 'capable', 'of', 'producing', 'life threatening', 'flash', '•', 'floods', '\n\n', 'are', 'possible!']]
new_data = [
' '.join(x.strip() for x in (''.join(c for c in s if c.isalpha() or c == ' ') for s in sl) if x) for sl in data
]
print(new_data)
Output:
['we will pray and hope for the best',
'though it may not make landfall all week if it follows that track',
'heavy rains capable of producing life threatening flash floods are possible']