どーも!
たかぽんです!
今回は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
それでわ!