2011-11-09 2 views
2

2次元のリストを与えられたので、私はサブリストを含むすべてを探したいと思います。Pythonでサブリストを効率的にマッチングする

#Psuedo-Python (not kosher) 
def MatchAll(theList,toMatch): 
    result=list(theList) 
    for nMatch in toMatch: 
     for nResult in result: 
      if not nMatch in nResult: 
       result.remove(nResult) 
    return result 

しかし、これについては何か悪いことがあるようです。今まで見てきたPythonコードとはまったく違うのですが、反復しながらリストに変更を加えているだけでなく、私が読んだことはまったく良いことではありません。また、それはひどく非効率的だと思われます:toMatchは私の目的のために3つ以上の長さを持つべきではありませんが、Listの長さは不明であり、かなり大きくなる可能性があります。どんな助力も大変ありがとうございます。事前に感謝しています。

+0

をこれの意味は全く明らかではありません。 「サブリストを含むすべて」とはどういう意味ですか? –

答えて

3

「一致」リストのすべての項目に一致するサブリストのみを保持します。

def match_all(the_list, to_match): 
    return [sublist for sublist in the_list 
       if all(item in sublist for item in to_match)] 

あなたはsetを使用してこれをスピードアップすることができます。

def match_all(the_list, to_match): 
    matches = set(to_match).issubset 
    return [sublist for sublist in the_list if matches(sublist)] 
+0

その条件を 'set(item)<= set(to_match)'にしてください。 :) –

+0

聖なる鯉!これは、それが後見のなかではっきりとしているように思えます。私はあなたにとても感謝しています。 – LHT

+0

Eh、あなたはすべてのビットをset()<= set()ビットで置き換えることを意味しますか?私はリストをセットに変換することがあまりにもひどく非効率ではないと推測していますか? – LHT

関連する問題