2016-10-18 4 views
0

私は2つのリストを持っており、一致するものを削除して別のものを残したいと思います。 2つのリストは、 "アラビア語" である場合に2つのリストに異なる単語が見つかりました

def check_synonym(text): 
    tokens=regexp_tokenize(text, r'[،؟!.؛\s+]\s*', gaps=True) 
    based_text= ' '.join(cursor.execute('SELECT request FROM Male_Conversation_Engine WHERE request REGEXP?',[tokens[0]]).fetchone()) 
    based_tokens=regexp_tokenize(str(based_text), r'[،؟!.؛\s+]\s*', gaps=True) 
    for w1 in based_tokens: 
     for w2 in tokens: 
      if w1 == w2: 
       based_tokens.remove(w1),tokens.remove(w2)  
return list 

tokens = ['هذا','الجهاز','الجميل'] 
based_tokens = ['هذا','الجهاز','جيد'] 

は、出力は次のようになります。

tokens = ['الجميل'] 
based_tokens = ['جيد'] 

実際の出力:

tokens = ['الجهاز','جميل'] 
based_tokens = ['الجهاز','جيد'] 
ここ コードです

サイドのみ最初の要素 'هذا'を参照し、残りのリストを返します。 (のpython3を使用して)

+0

[Pythonの、計算リスト差](http://stackoverflow.com/questions/6486450/python-compute-list-difference) – xbonez

答えて

0

あなたは大規模なリストのために、セットでメンバーシップを確認するためにはるかに高速ですので、私はセットを使用しています唯一の理由があるセットとリスト内包

s1 = set(tokens) 
s2 = set(based_tokens) 

tokens = [t for t in tokens if t not in s2] 
based_tokes = [t for t in based_tokens if t not in s1] 

の組み合わせを使用することができます。

+1

の可能性の重複は、あなたがset' 'にそれらを変換すると、あなたがすることもできdo 's1.difference(s2)' – xbonez

+0

@xbonez 2番目のリストは最初のリストに表示されないものと同じものが5つある可能性があるので、この問題の解決策が嫌いです。 –

+0

@xbonezこれは重要な場合にはリストの順序をも殺します –

0
set1=set(tokens) 
    set2=set(based_tokens) 

    tokens = set1-set2 
    based_tokens = set2-set1 
関連する問題