如何从Python中的列表中过滤项目?

时间:2009-08-21 21:27:31

标签: python

我有从包依赖列表中天真收集的数据。

取决于:foo bar baz> = 5.2

我最终得到了

 d = set(['foo','bar','baz','>=','5.2'])

我不想要数字和操作数。

在Perl中我会

@new = grep {/^[a-z]+$/} @old

但我找不到办法,例如传递remove()一个lambda,或者什么。

我最接近的是丑陋的:

[ item != None for item in [ re.search("^[a-zA-Z]+$",atom)   for atom in d] ]

它为我提供了我想要的集合中哪些值的映射... 如果集合的顺序是可重复的?我知道在Perl哈希中并非如此。

我知道如何迭代。 :)我正在努力做到pythonesque正确的方式

2 个答案:

答案 0 :(得分:23)

这里不需要正则表达式。使用str.isalpha。有和没有列表理解:

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)

个人我不认为你必须对Python中的所有东西使用列表理解,但是当我建议mapfilter答案时,我总是皱着眉头

答案 1 :(得分:1)

怎么样

d = set([item for item in d if re.match("^[a-zA-Z]+$",item)])

它可以为您提供所需的值,返回d(顺序可能不同,但这是您使用集合所支付的价格。