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

All*_*out 10 python

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

取决于:foo bar baz> = 5.2

我结束了

 d = set(['foo','bar','baz','>=','5.2'])
Run Code Online (Sandbox Code Playgroud)

我不想要数字和操作数.

在Perl我会的

@new = grep {/^[a-z]+$/} @old
Run Code Online (Sandbox Code Playgroud)

但我找不到一种方法来传递remove()一个lambda,或者其他东西.

我最接近的是丑陋的:

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

它让我得到了我想要的集合中的值的地图... 如果集合的顺序是可重复的?我知道在Perl哈希中并非如此.

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

Tri*_*ych 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)
Run Code Online (Sandbox Code Playgroud)

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

  • 没有 lambda 的过滤器是 A-OK (3认同)
  • 在这个(令人惊讶的常见)情况下没有lambda的过滤器就是A-OK,只要你没有混合str和unicode对象,否则所有地狱都会松动. (2认同)