32

式を自動的に因数分解できるコードを作成しようとしています。たとえば、2 つのリスト [1,2,3,4] と [2,3,5] がある場合、コードは 2 つのリスト [2,3] で共通の要素を見つけて、残りの要素は [1,4,5] の新しいリストにまとめられます。

この投稿から:リストの交差点を見つけるには? 共通要素は次の方法で見つけることができることがわかります

set([1,2,3,4]&set([2,3,5]). 

私の例では[1,4]と[5]である各リストから非共通要素を取得する簡単な方法はありますか?

for ループを実行できます。

lists = [[1,2,3,4],[2,3,5]]
conCommon = []
common = [2,3]
for elem in lists:
    for elem in eachList:
    if elem not in common:
        nonCommon += elem

しかし、これは冗長で非効率的です。Python はそれを行うことができる便利な関数を提供していますか? 前もって感謝します!!

4

7 に答える 7

74

sに対称差分演算子set(別名 XOR 演算子) を使用します。

>>> set([1,2,3]) ^ set([3,4,5])
set([1, 2, 4, 5])
于 2012-07-05T16:12:07.917 に答える
10

この種の問題に対処するには、交差点の概念を使用できます。

b1 = [1,2,3,4,5,9,11,15]
b2 = [4,5,6,7,8]
set(b1).intersection(b2)
Out[22]: {4, 5}

このコードを使用することの最も良い点は、大きなデータに対しても非常に高速に動作することです。このロジックを使用すると、607139 要素の b1 と 296029 要素の b2 があり、2.9 秒で結果が得られます。

于 2015-08-18T07:56:41.710 に答える