2017-08-01 11 views
0

にコードを変換する私は、行が1つ以上のキーワードが含まれてかどうかを確認するために、リストを反復処理するコードのビットを書いた:はリスト内包

STRINGS_TO_MATCH = [ "Foo", 
        "Bar", 
        "Oggle" ] 

for string in STRINGS_TO_MATCH 
    if string in line: 
     val_from_line = line.split(' ')[-1] 

誰でも作るための方法があるかどうかを知ることが起こるんこれはもっと読みやすい?リストの理解度はここでよりうまくフィットするでしょうか?

+1

「ライン」とは何ですか? –

+0

また、 'val_from_line'はリストになっていますか? –

+0

各入力ファイルには100sのランダムな線があります。私はファイルを繰り返しているので、各行が含まれています。 val_from_lineには、ファイルの特定のフィールドも含まれます。 – Shibby

答えて

2

ここで覚えておくべきことは、は、の表記であり、その目的は、値リスト内包表作成リストの作成、辞書内包表記の作成、および内包表記セットの作成です。このようなオブジェクトを作成していないため、このケースではほとんど役に立ちません。

を実行していないためコードサンプルが不完全ですval_from_line値を抽出したものはすべてです。私はSTRINGS_TO_MATCHの文字列のいずれかを含むlineから最後の "単語"を抽出したいと思っていますが、このような不完全な情報を扱うのは難しいので、私の知っている限り、全く役に立たないでしょう。

私が正しいんだと仮定すると、lineSTRINGS_TO_MATCHのいずれかが含まれているかどうかを確認する最も簡単な方法は、これはと類似している、いわゆるジェネレータ式を、使用して表現

any(s in line for s in STRINGS_TO_MATCH) 

を使用することですリストの理解 - インタプリタは一連の値を生成するために反復することができますが、値のリストを作成するのではなく、クライアントコードとして作成します(この場合はanyビルトイン関数)がそれらを要求します。だから、私はこのコードを実行した後val_from_lineがかかどうかに応じて、(存在しない場合があることを警告ノートで、あなたが実際にその後何をしたいのかを決定するためにあなたを残しておきます

if any(s in line for s in STRINGS_TO_MATCH): 
    val_from_line = line.split(' ')[-1] 

ようにコードを書き換える可能性があります条件は真実ではない)、これは決して完全に快適な状況ではない。

+0

これはまさに私が探していたものです!ありがとう! – Shibby