2012-07-11 2 views
19

可能性の重複をリストを削除します。
Get difference from two lists in PythonはPythonでリストから

これを行う簡単な方法は何ですか?私は自分で試していますが、私はそれを理解することはできません。 リストaとリストbの場合、新しいリストにはリストaのみのアイテムが必要です。だから:

私はコードを書こうとしましたが、毎回常にリスト全体を返します。

答えて

5

これは機能しますか?

より簡潔
a = ["apple", "carrot", "lemon"] 
b = ["pineapple", "apple", "tomato"] 

new_list = [] 
for v in a: 
    if v not in b: 
     new_list.append(v) 

print new_list 

または、:

new_list = filter(lambda v: v not in b, a) 
21

あなたはこの要素がnew_listで終わるする必要がある文字通りを教えてくれるlist comprehensionを使用して書き込むことができます。

a = ['apple', 'carrot', 'lemon'] 
b = ['pineapple', 'apple', 'tomato'] 

# This gives us: new_list = ['carrot' , 'lemon'] 
new_list = [fruit for fruit in a if fruit not in b] 

または、使用をforループ:

new_list = [] 
for fruit in a: 
    if fruit not in b: 
     new_list.append(fruit) 

これらのアプローチは非常によく似ています。そのため、Pythonにもリストを簡単に作成するためのリスト内包があります。

3

あなたはこの必要があります。

a = ["apple", "carrot", "lemon"] 
b = ["pineapple", "apple", "tomato"] 

new_list = [x for x in a if (x not in b)] 

print new_list 
13

あなたはsetを使用することができます。

# Assume a, b are Python lists 

# Create sets of a,b 
setA = set(a) 
setB = set(b) 

# Get new set with elements that are only in a but not in b 
onlyInA = setA.difference(b) 

はUPDATE
iurisilvioとmgilsonが指摘したようにabがしなければ、この方法はのみ動作します重複を含まず、要素の順序が重要でない場合

+0

を与えるが、それは文字列が重複した場合には、リストを変更します。 – iurisilvio

+1

@iurisilvio:そうです。このアプローチは、 'a'と' b'が一意のエントリしか含んでいない場合にのみ機能します。その場合、 'a'、' b'のために 'set'を使うのはもっと意味があります。しかし、これはおそらく最も速いアプローチです。 –

+0

項目の順序が重要であれば動作しませんが、ここではそうでないかもしれません(私の+1) – mgilson

2

sets(または、は2.6から廃止されているため組み込み済み)はどうですか?

from sets import Set 
a = Set(['apple', 'carrot', 'lemon']) 
b = Set(['pineapple','apple','tomato']) 
new_set = a.difference(b) 
print new_set 

は、私は、これが移動するための方法であると思います出力

Set(['carrot', 'lemon']) 
+0

組み込みの 'set'を使わないのはなぜですか? – mgilson

+0

私は[python docs](http://docs.python.org/library/sets.html#sets.Set)の例からそれを得ましたが、私はなぜ彼らがそうしたのかわかりません。 – StuGrey

+0

'sets'はPython v2.6から廃止されました(http://docs.python.org/library/sets.htmlを参照) –

関連する問題