2016-03-21 14 views
9

namesという文字列のリストがあり、patternリストの各要素でnamesリストの各要素を検索する必要があります。個々の文字列のための貫通ではなく、文字列文字列要素の別のリストと一致する文字列要素のリストを検索

a = [x for x in names if 'st' in x] 

のリストについては、ループが事前にありがとうございことができますが見つかりましたいくつかのガイド!

names = ['chris', 'christopher', 'bob', 'bobby', 'kristina'] 
pattern = ['st', 'bb'] 

所望の出力:

a = ['christopher', 'bobby', 'kristina] 

答えて

8

generator expressionany()機能を使用します

a = [x for x in names if any(pat in x for pat in pattern)] 

any()は短絡機能なので、それはそのパターンに遭遇初めて一致すると、Trueを返します。リストの理解の代わりにジェネレータ式を使用しているので、一致する最初のパターンの後のパターンもチェックされません。つまり、これはできるだけ速い方法です。 ;

[name for name in names if any([p in name for p in pattern])] 

コードは自明です、ちょうどそれを大声で読み:

+0

はチャンピオンのように働いた、と説明をありがとうございました!!! – Christopher

2

あなたはこのような何かを行うことができますパターンの1つを持つすべての名前のリストを作成しています。二つのループ使用

for name in names: 
    for pattern in patterns: 
     if pattern in name: 
      # append to result 
+0

大きな示唆を読んでくれてありがとう、それは助ける:) – Christopher

関連する問題