试图确保某些符号不在一个单词中

时间:2015-12-22 15:16:27

标签: python

我目前有以下内容来过滤带有方括号和普通括号的字词并且无法提供帮助,但我们认为必须有更简洁的方法来执行此操作。

words = [word for word in random.choice(headlines).split(" ")[1:-1] if "[" not in word and "]" not in word and "(" not in word and ")" not in word]

我尝试创建符号列表或元组并执行

if symbol not in word

但它会因为我将列表与字符串进行比较而死亡。我很欣赏我可以将其爆炸并进行比较,如:

for word in random.choice(headlines).split(" ")[1:-1]:
    popIn = 1
    for symbol in symbols: 
        if symbol in word:
            popIn = 0
    if popIn = 1:
        words.append(word)

但这似乎有点过头了。我很欣赏我是一名新手程序员,所以我能做的任何事情都可以帮助他们整理任何一种方法。

2 个答案:

答案 0 :(得分:4)

使用set intersection。

brackets = set("[]()")
words = [word for word in random.choice(headlines).split(" ")[1:-1] if not brackets.intersection(word)]

如果word不包含brackets中的任何字符,则交叉点为空。

您也可以考虑使用itertools而不是列表理解。

words = list(itertools.ifilterfalse(brackets.intersection,
                                    random.choice(headlines).split(" "))[1:-1]))

答案 1 :(得分:0)

我不确定你要过滤什么,但我建议你使用python的Regular expression模块。

import re

r = re.compile("\w*[\[\]\(\)]+\w*")
test = ['foo', '[bar]', 'f(o)o']

result = [word for word in test if not r.match(word)]
print result

输出是 ['foo']