python:if-else在一行三元运算符的列表元素上

时间:2017-06-25 11:04:22

标签: python ternary-operator

当我遇到以下代码时,我正在浏览python中的推文标记代码。请注意,tokens_reemoticons_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

2 个答案:

答案 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]