我有从包依赖列表中天真收集的数据。
取决于: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正确的方式
答案 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中的所有东西使用列表理解,但是当我建议map
或filter
答案时,我总是皱着眉头
答案 1 :(得分:1)
怎么样
d = set([item for item in d if re.match("^[a-zA-Z]+$",item)])
它可以为您提供所需的值,返回d(顺序可能不同,但这是您使用集合所支付的价格。