How can I filter items from a list in Python?

python

Solution

No need for regular expressions here. Use `str.isalpha`. With and without list comprehensions:

my_list = ['foo','bar','baz','>=','5.2']

# With
only_words = [token for token in my_list if token.isalpha()]

# Without
only_words = filter(str.isalpha, my_list)

Personally I don't think you have to use a list comprehension for everything in Python, but I always get frowny-faced when I suggest `map` or `filter` answers.

Problem

I have data naively collected from package dependency lists. Depends: foo bar baz >= 5.2 I end up with ``` d = set(['foo','bar','baz','>=','5.2']) ``` I don't want the numerics and the operands. In Perl I would ``` @new = grep {/^[a-z]+$/} @old ``` but I can't find a way to e.g. pass remove() a lambda, or something. The closest I've come is ugly: ``` [ item != None for item in [ re.search("^[a-zA-Z]+$",atom) for atom in d] ] ``` which gets me a map of which values out of the set I want...if the order of the set is repeatable? I know that's not the case in Perl hashes. I know how to iterate. :) I'm trying to do it the pythonesque Right Way

Original source

Related problems