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

連続する要素のペアをカウントするPythonプログラム


数値文字列sに数桁が含まれているとします。数字は複数回出現する可能性があります。いくつかのペア(数字、カウント)を返す必要があります。これは、どの数字がsで何回連続して発生したかを表します。この問題を解決するために、itertoolsライブラリの下にあるgroupby()関数を使用できます。これにより、各アイテムが1番目に配置され、別のgroupbyオブジェクトが2番目に配置される1つのイテレータオブジェクトが返されます。ペアごとにgroupbyオブジェクトの数を数える必要があります。

したがって、入力がs ="11522226551"の場合、出力は[(1、2)、(5、1)、(2、4)、(6、1)、(5、2)、( 1、1)]最初に1が2回存在するため、次に5を1つ、次に2を4つというように続きます。

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

  • it:=sのgroupby関数を呼び出す
  • ret:=新しいリスト
  • その中の各ペア(数字、gp)について、
    • retに(gpのリストの数字と長さ)を挿入します
  • return ret

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

from itertools import groupby

def solve(s):
   it = groupby(s)
   ret = []
   for digit, gp in it:
      ret.append((int(digit), len(list(gp))))
   return ret

s = "11522226551"
print(solve(s))

入力

"11522226551"

出力

[(1, 2), (5, 1), (2, 4), (6, 1), (5, 2), (1, 1)]

  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プログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、クイックソートの概念を使用して配列を並べ替える必要があります ここでは、最初に配列をパーティション化し、別のパーティションを並べ替えて、並べ替えられた配列を取得します。 次に、以下の実装のソリューションを見てみましょう- 例 # divide function def partition(arr,low,high):    i = ( low-1 )    pivot = arr[high] # pivot element   &nb