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

Map関数を使用したPythonのバイナリ文字列の連続する1の最大長


数値の2進表現を扱う場合、数値に連続する1がいくつ存在するかを調べる必要がある場合があります。この記事では、それを見つける方法を2つ紹介します。

分割とマップの使用

Pythonのsplit関数を使用して、指定された文字列を複数の文字列に分割できます。これをゼロで分割し、map関数を使用して、生成された分割の中で最大の長さを見つけます。

data = '11110000111110000011111010101010101011111111'
def Max_len_cons_1(data):
print ("Maximum Number of consecutive one's: ",max(map(len,data.split('0'))) )
Max_len_cons_1(data)

出力

上記のコードを実行すると、次の結果が得られます-

Maximum Number of consecutive one's: 8

正規表現の使用

Pythonのreモジュールを使用して、連続する1の最大数をカウントすることもできます。ここで、1が存在する1つ以上の数を示す1+のパターンを見つけます。次に、それらのパターンの中から最大の長さを見つけます。

data = '11110000111110010011'
import re
the_ones = re.findall(r"1+", data)
print("The blocks of one's: ",the_ones)
print("Maximum Number of consecutive one's =", len(max(the_ones, key=len)))

出力

上記のコードを実行すると、次の結果が得られます-

The blocks of one's: ['1111', '11111', '1', '11']
Maximum Number of consecutive one's = 5

  1. PythonでDFAを使用して、バイナリ文字列が3の倍数であるかどうかを確認します

    任意の数のバイナリ表現を表す配列nがあるとします。 Deterministic Finite Automata DFAを使用して、そのバイナリ表現が3で割り切れるかどうかを確認する必要があります。 したがって、入力がn =[1、1、0、0](12のバイナリ)のような場合、出力はTrueになります。 これを解決するために、以下のようにDFAを構築できます- 数値が3で割り切れる場合、余りは0になり、そうでない場合、余りは1または2になります。これらの3つの余りには、3つの状態があります。余りが0の場合、数値が除算可能であることを意味するため、初期状態も最終状態です。 これを解決する

  2. 連続する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]