python:单行三元运算符中列表元素的 if-else

python: if-else on elements of list in one line ternary operator

当我遇到以下代码时,我正在研究 python 中的推文标记化代码。请注意 tokens_reemoticons_re 是正则表达式对象。由于 tokenize(s) returns 是一个列表,因此 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]
#^ 三元运算符表达式 ^

因此 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

格式化评论:

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]