2011-01-24 17 views
1

例:のpython:その後、新しいリストにリスト全体のエントリを追加し、別のリストに1つのリスト内の文字列を検索する

L1=['cat', 'dog', 'fish', 'bird', 'rabbit', 'horse'] 

L2=[('cat', 'a', 'b', 'c'), ('cat', 'c', 'd', 'e'), ('cat', 'e', 'f', 'g'), ('fish', 'x', 'y', 'z'), ('dog', 'w', 'x', 'y'), ('dog', 'z', 'y', 'x'), ('horse', '1', '2', '3'), ('monkey', 'a', 'b', 'c'), ('kitten', 'h', 'i', 'j'), ('bird', '4', '5', '6')] 

私は、L2におけるL1内の文字列を検索しようとしています、もしそう文字列L2内の任意の部分にL1が存在する場合、L2 "('cat, a, b, c')"のエントリ全体が新しいリストに追加されます。私はまた、おそらくL1から文字列の一部を持っていないエントリを削除すると動作すると思った。 私は試しました:

def searcher(L1, L2): 
    common = [] 
    for x in L1: 
     if re.search(x, L2): 
      common.append(L2) 

    return common 

しかし、それは動作しませんでした。 私が使用している実際のリストははるかに長いので、効率的なコードは本当に私を助けます。

ありがとうございます!

+0

L2' '内の文字列の周りなぜ括弧を試してみてください?彼らは何もしません。 –

+0

L2の最初のエントリのために '( 'cat'、 'a'、 'b'、 'c')'を実際に意味しますか? –

+0

@marsx:あなたはそれがうまくいかなかったのですか?そうでなければ、これは単なる宿題の質問です。 – user225312

答えて

5

s = set(L1) 
new_list = [a for a in L2 if any(b in s for b in a)] 
+0

タプルには.split()属性がありません。 – marsx

+0

@marsx:解決策はあなたの最初のバージョン質問。今更新されました。 –

+0

実際には、これを.splitの部分を取り出すと完全に動作します。ありがとう! – marsx

0

たぶん

s = set(L1) 
new_list = [a for a in L2 if s.intersection([w.strip() for w in set(a.split(","))])] 
関連する問題