当我遇到以下代码时,我正在浏览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
答案 0 :(得分:4)
三元运算符具有相同的语法:
[(token if emoticon_re.search(token) else token.lower()) 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
答案 1 :(得分:3)
格式化评论:
tokens = [token if emoticon_re.search(token) else token.lower() for token in tokens]
相当于
tokens = [(token if emoticon_re.search(token) else token.lower()) for token in tokens]