2012-05-11 18 views
1

他のリストと照合して一致したい単語のリストがあります。私は通常、個々のベースでlist.remove( 'entry')を使用しますが、別のリストに対するエントリのリストをループしてから、それらを削除すると私は困惑します。何か案は?他のリストのエントリと一致するリストエントリを削除します

+3

あなたは冒涜フィルタを書いていますか? [Scunthorpe problem](http://en.wikipedia.org/wiki/Scunthorpe_problem)で幸運を祈る! – Johnsyweb

+0

注文には問題がありますか? (もしそうなら、フィルタを持っていなければ、セットを取る) – georg

答えて

10

filterを使用する:

>>> words = ['there', 'was', 'a', 'ffff', 'time', 'ssss'] 
>>> curses = set(['ffff', 'ssss']) 
>>> filter(lambda x: x not in curses, words) 
['there', 'was', 'a', 'time'] 
>>> 
また、リスト内包表記で行うことができる

>>> [x for x in words if x not in curses] 
+2

'curses'をリストにするのは悪い考えです - ' in'は集合のO(1)、リストのO(n)です。 –

+0

ありがとうヒュー、訂正が行われました。 –

4

セットを使用します。

a=set(["cat","dog","budgie"]) 
b=set(["horse","budgie","donkey"]) 
a-b 
->set(['dog', 'cat']) 
+0

リストがすでに定義されているとどうなりますか?私は何ができる: = [ 'bad_word1'、 'bad_word2'] B = [ 'A'、 'B'、 'bad_word1'] SET1 =セット(A) SET2 =セット(B) set1 - set2 a = set1 b = set2 – ewhitt

+0

セットは単語の順序を混乱させる可能性があり、リストから重複する単語を削除することもあります。また、私は速くなるはずです。 –

関連する問題