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

Pythonのバイナリ表現で1カウントに基づいて数値をソートするプログラム


nums単位の数値のリストがあるとします。各番号のバイナリ表現に存在する1の数で、リストを昇順で並べ替える必要があります。 2つの数値の1の数が同じである場合は、それらの値に基づいて配置します。

したがって、入力がnums =[4、1、12、7、6]のような場合、-

であるため、出力は[1、4、6、12、7]になります。
  • 4のバイナリ形式は0100です
  • 1のバイナリ形式は0001です
  • 6のバイナリ形式は0110です
  • 12のバイナリ形式は1100です
  • 7のバイナリ形式は0111です

したがって、配置は[1、4、6、12、7]であり、値が小さいため1が最初になり、同じ理由で6が最初になります。

これを解決するには、次の手順に従います-

  • 関数比較を定義します。これには数nが必要です
  • これは、(nのバイナリ形式で1カウント、nの値)を持つペアpを返します
  • 比較の前に各値を比較関数に渡して数値を並べ替えます
  • 数値を返します。

理解を深めるために、次の実装を見てみましょう-

def solve(nums):
   nums.sort(key=lambda num: (bin(num).count("1"), num))
   return nums

nums = [4, 1, 12, 7, 6]
print(solve(nums))

入力

[4, 1, 12, 7, 6]

出力

[1, 4, 6, 12, 7]

  1. 連続する1’のないバイナリ文字列の数をカウントするPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −正の整数Nが与えられているので、文字列に連続する1が存在しないように、長さNで使用可能なすべての可能な個別のバイナリ文字列をカウントする必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # count the number of strings def countStrings(n):    a=[0 for i in range(n)]    b=[0 for i in range(n)]    a[0] = b[0]

  2. バイナリ挿入ソート用のPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、バイナリ挿入ソートの概念を使用して配列をソートする必要があります。 ここでは、名前が示すように、挿入ソートアルゴリズムとともにバイナリ検索の概念を使用します。 次に、以下の実装のソリューションを見てみましょう- 例 # sort def insertion_sort(arr):    for i in range(1, len(arr)):       temp = arr[i]       pos =