Python のリスト間の対称差

Beginner

This tutorial is from open-source community. Access the source code

はじめに

Python において、2 つのセットの対称差は、どちらか一方のセットには含まれているが、それらの共通部分には含まれていない要素のセットです。このチャレンジでは、2 つのリストを入力として受け取り、それらの対称差を返す関数を書きます。

対称差

2 つのリストを引数として受け取り、それらの対称差をリストとして返す関数 symmetric_difference(a, b) を書きます。この関数は重複する値をフィルタリングしないものとします。

この問題を解くには、次の手順をたどることができます。

  1. それぞれのリストからセットを作成します。
  2. それぞれのセットに対して、他方のセットに含まれていない値のみを残すためのリスト内包表記を使用します。
  3. 手順 2 で得られた 2 つのリストを連結します。
def symmetric_difference(a, b):
  (_a, _b) = (set(a), set(b))
  return [item for item in a if item not in _b] + [item for item in b
          if item not in _a]
symmetric_difference([1, 2, 3], [1, 2, 4]) ## [3, 4]

まとめ

このチャレンジでは、Python において 2 つのリストの対称差を見つける方法を学びました。また、この問題を解くためにセットとリスト内包表記をどのように使うかも学びました。