当我遇到以下代码时,我正在研究用 python 对推文进行标记化的代码。请注意,tokens_re 和 emoticons_re 是正则表达式对象。由于 tokenize(s) 返回一个列表,因此 tokens 是一个列表。我是 python 的新手,我不确定 if-else 是否在列表的元素上运行。 ternary operator如前所述,没有相同的语法。
def tokenize(s):
return tokens_re.findall(s)
def preprocess(s, lowercase=False):
tokens = tokenize(s)
if lowercase:
tokens = [token if emoticon_re.search(token) else token.lower() for token in tokens]
return tokens
请您参考如下方法:
三元运算符具有相同的语法:
[<b>(token if emoticon_re.search(token) else token.lower())</b> for token in tokens]
#^ ternary operator expression ^
因此 for 不是三元运算符的 else 部分。 for 是列表理解 本身的一部分。
三元运算符在这里用粗体写成。在 C/C++/C#/Java 中,我们会这样写:
// Java equivalent
emoticon_re.search(token) ? token : token.lower()
所以基本上对于列表中的每个项目,它都会应用三元运算符。列表理解等同于:
# list comprehension is equivalent to:
tmp = []
for token in tokens:
if emoticon_re.search(token):
tmp.append(token)
else:
tmp.append(token.lower())
tokens = tmp
