2016-07-08 4 views
0

から一意の値を収集します。は、両方が同じ値、すなわち、主に含まれている、私は現在2はリストの「設定」している2つのリスト

a = [1,2,3,4,5,6] 

b = [1,2,3,4,5,6,7,8] 

私は何をしようとしていること2を比較して、唯一の返しで7 & 8私は運がなかったしましたが、誰もが迅速かつ公平に簡単な方法を知っているん

c = [item for item in a if item not in b] 

:しかし、私は運がないよ別のリストの中に、私はここのようなに見つけたいくつかの方法を試してみましたこれをするの?どちらのリストも以前は自分のリスト内の重複を取り除くために "セット"されていました(違いがあればそれを加えてください)。

私は残念ではないと思うので、値がすでにセットフォーマットになっていて、何らかの理由で私の頭の中でarray_unique PHP関数のように動作するリストにsetを使用したときに。

ありがとうございました。

set(b) - set(a) 
Out[65]: {7, 8} 

以上の明示:あなたがセットに使用できる

+0

あなたはセットからそれらを変換する理由がありますリストに? – ayhan

+0

@Adrocks__、リストbまたは両方のリストから一意の値を検索しようとしていますか? –

+0

@ayhan - 申し訳ありませんが、明らかでない場合は、現在の段階でリストとして開始しました。それらはセット内にあります(複製の削除用)。 @ Valera> リスト/セットAにないすべての値をリスト/セットBから戻そうとしています。後でスクリプトのために大きなリストに表示されるユニークが必要です。 –

答えて

2

対称差について

set(b).difference(a) 
Out[67]: {7, 8} 

を、あなたは^を使用することができます。 aまたはbにある要素を返しますが、両方にある要素は返しません。彼らはすでにあなただけb - ab^aを行うことができ、設定されている場合

a = [1, 2, 3, 4, 5, 6, 9] 
b = [1, 2, 3, 4, 5, 6, 7, 8] 
set(b)^set(a) 
Out[70]: {7, 8, 9} 

あるいは、

set(b).symmetric_difference(a) 
Out[71]: {7, 8, 9} 

aは、追加要素、9を持っていると仮定します。

aには、bに含まれていない項目が存在しないため、この試行は機能しません。その違い(b-a)の場合は、[item for item in b if item not in a]が必要です。

+0

私は "final = set(b)-set(a)"を試したと思いますが、メモリから6,7,8を返しました。スクリプトに再度アクセスして何が起こるかを見ると、別のものが動きます。 「リスト」がすでにセットに入っていて、リストに再変換されていないことを混乱させてしまったと思うように、ちょうどメインポストを編集しました。ごめんなさい –

-1
list(set(a)-set(b))+list(set(b)-set(a)) 
+0

あまりにも多くのセットが作成され、この1ライナー – smac89

0

別のアプローチは、両方のリストから、各要素の出現回数をカウントするdefaultdictを使用している:

from collections import defaultdict 
from itertools import chain 

a = [1,2,3,4,5,6,9] 

b = [1,2,3,4,5,6,7,8,9] 

d = defaultdict(int) 

for num in chain(a, b): 
    d[num] += 1 


print([key for key, value in d.items() if value == 1]) 

出力:

[7, 8] 
関連する問題