2017-06-25 10 views
1

次のコードに遭遇したときに、私はPythonでツイートをトークン化するコードを調べていました。 tokens_reemoticons_reは正規表現オブジェクトであることに注意してください。 tokenize(s)はリストを返すので、tokensはリストです。私はPythonには新しくて、リストの要素でif-elseが動いているのかどうかわかりません。上記のternary operatorは同じ構文をしていません。だから、forは三項演算子else一部のない一部であるpython:if-elseの要素を1行にします。3進演算子

[(token if emoticon_re.search(token) else token.lower()) for token in tokens] 
#^    ternary operator expression   ^

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 
+1

に相当します。 –

+0

与えられたコードのリストのすべての要素に対して三項演算子をどのように使用していますか?私はどのように彼はelseブロックでforループを使用するが、ifブロックのリストのすべての要素を反復したのか理解できない。 – kartikeykant18

+0

正常に動作する。 _listの理解では、 'token'は' tokens'をループし、 'token'の各値に対して三項式を持ちます。その結果は結果のリストに格納されます。用語の括弧を想像してみてください。 –

答えて

4

三項演算子は同じ構文を持っています。 forは、リストの理解の一部です。

三項演算子は太字で書かれています。だから、基本的には、リスト内のすべての項目のために、それは三項演算子を適用します

// Java equivalent 
emoticon_re.search(token) ? token : token.lower() 

:C/C++/C#/ Javaでは、我々はとしてそれを書かれているだろう。リスト内包は同等です:

# 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 
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] 
関連する問題