てくてくテック

【Python3】2つのリストから、重複する要素をリストとして取り出す方法!

どーも!

たかぽんです!

今回はPythonで重複する要素だけ取り出す方法を見ていこうと思います!

やりたいこと

さて、それではやっていこうと思います!

今回やることですが、複数あるリストから、重複する要素をリストとして取り出す...といったことをやっていきます!

例えば...

以下のような二つの配列があった場合...

listA = [1,2,3,4,5,6,7,8,9]
listB = [2,4,6,8,10]

listA, listBどちらにも含まれる値だけ使って新しいresultを作ります。

result = [2,3,6,8] # listA,listBどちらにも含まれるものだけ

では、方法を見ていきましょう!

重複する要素をリストとして取り出す

さて、それではやっていきます!

と...いきなり結論!

以下で可能です!

listA = [1,2,3,4,5,6,7,8,9]
listB = [2,4,6,8,10]

result = list(set(list1) & set(list2)) # listAとlistBの共通箇所だけリストとして取り出す

setメソッドを使用して集合に変えたあと、演算子の&を使えばいいんですね!

とっても楽ちん...!

注意して欲しいのが、出力順がソートされていない形になります。

上記例の場合... "result = [8,2,4,6]"等...

また、setがない場合、リストに対して"&"が使えないため...以下のようなエラーが出てしまいます。

# 実際のプログラムの箇所
list1 & list2 

# Errorになる!
TypeError: unsupported operand type(s) for &: 'list' and 'list'
    return list1 & list2
Line 3 in intersection (Solution.py)
    ret = Solution().intersection(param_1, param_2)
Line 27 in _driver (Solution.py)
    _driver()
Line 38 in <module> (Solution.py)

そのため、setをつける必要があります。

setをつけると、出力は集合型になってしまうため、積を取ったあと、ちゃんとlist()でリストに戻しておきます。

さらに、ソートをする場合も末尾に"sorted"メソッドで一発です...!

sorted(list(set(nums1) & set(nums2)))

たった一行でかけるのはさすがPython....!(他もかけるかもですが...)

まとめ

今回はPython3で二つのリストからいい感じに重複箇所だけ取得し、そのリストを返す...といった処理を考えてみました。

ソートも簡単だし、Python...やりおる....ですね...!

最近はPyton楽しい...!ってなってます...w

それでわ!

モバイルバージョンを終了