Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】2つの数値に共通しない一意の桁をすべて出力する方法

はじめに

2つの数値を比較し、どちらか一方にしか存在しない桁(共通しない数字)をすべて出力したい場面は、データ処理やアルゴリズムの学習においてよくあります。Pythonでは、set(集合)型symmetric_differenceメソッドを使うことで、この処理を非常にシンプルに実装できます。

本記事では、2つの整数を引数として受け取り、共通しない一意の桁を降順で出力する関数の作り方を、サンプルコードと実行結果とあわせて解説します。

サンプルコード

以下は、2つの数値から共通しない桁を抽出して出力するプログラムの例です。

def distinct_uncommon_nums(val_1, val_2):

   val_1 = str(val_1)
   val_2 = str(val_2)
   list_1 = list(map(int, val_1))
   list_2 = list(map(int, val_2))
   list_1 = set(list_1)
   list_2 = set(list_2)
   my_list = list_1.symmetric_difference(list_2)
   my_list = list(my_list)
   my_list.sort(reverse=True)

   for i in my_list:
      print(i)

num_1 = 567234
num_2 = 87953573214
print("1つ目の数値:")
print(num_1)
print("2つ目の数値:")
print(num_2)
distinct_uncommon_nums(num_1, num_2)

実行結果

1つ目の数値:
567234
2つ目の数値:
87953573214
9
8
6
1

コードの解説

  • 関数の定義: distinct_uncommon_nums 関数は、2つの整数を引数として受け取ります。

  • 文字列への変換: 各整数を str() で文字列に変換することで、数値を1桁ずつ扱えるようにします。

  • リスト化: map(int, ...) を使って各文字を整数に変換し、リストを作成します。

  • 集合への変換: set() で重複する桁を除去し、一意の値だけを保持します。

  • 対称差の取得: symmetric_difference メソッドにより、どちらか一方にのみ存在する要素(対称差)を求めます。

  • 並べ替え: 結果をリストに戻し、sort(reverse=True) で降順にソートします。

  • 出力: forループで各桁を順番にコンソールへ表示します。

  • 関数の呼び出し: 関数の外で2つの数値を定義して表示した後、それらを引数として関数を呼び出し、結果を出力します。

symmetric_difference とは

symmetric_difference は、2つの集合のうち「どちらか一方にだけ存在する要素」を返すメソッドで、数学における排他的論理和(XOR)に相当します。今回の例では、567234 の桁の集合 {5, 6, 7, 2, 3, 4} と 87953573214 の桁の集合 {8, 7, 9, 5, 3, 2, 1, 4} の対称差を取るため、両方に含まれる 2, 3, 4, 5, 7 が除外され、残った 9, 8, 6, 1 が出力されます。

補足:「^」演算子でも同じ結果が得られる

set 型では、symmetric_difference メソッドの代わりに ^ 演算子を使っても同じ対称差を求められます(例:list_1 ^ list_2)。より簡潔にコードを書きたい場合に便利なので、覚えておくとよいでしょう。

  1. 指定された文字列のすべての順列を出力するPythonプログラム

    本記事では、以下の問題に対する解決策について詳しく学んでいきます。 問題文 1つの文字列が与えられたとき、その文字列から作成できるすべての順列(並べ替えの組み合わせ)を表示する必要があります。 それでは、以下の実装例で具体的な解決策を見ていきましょう。 実装例 # リストを文字列に変換 def toString(List): return .join(List) # 順列の生成 def permute(a, l, r): if l == r: print(toString(a)) else: for i in range(l, r +

  2. Pythonで2つの数値を加算するプログラム:ビット演算による実装方法

    この記事では、2つの数値を加算するという問題に対する解法とアプローチについて詳しく解説します。 問題の概要 2つの大きな数値が与えられ、それらを加算した結果を出力することが求められます。 最も単純なアプローチは、オペランド同士を「+」演算子で結ぶ方法です。また、2つの数値をリストなどのイテラブルに格納し、Python標準ライブラリに用意されている組み込み関数 sum() を利用する方法もあります。 しかし、これらのアプローチでは10進数に対して直接演算を行うため、計算コストが増大するという課題があります。 ビット演算を用いた別のアプローチ そこで次に、数値をビット単位で操作する別のアプローチを