logo

パイソン |文字列から数値を抽出する

文字列を操作しているときに、出現するすべての数値を取得する必要があるという問題に何度も遭遇します。この種の問題は一般に、競技プログラミングや Web 開発でも発生します。この問題を解決する特定の方法について説明しましょう パイソン

  Input:   'There are 2 apples for 4 persons'   Output:   [2, 4]   Explanation:   2 and 4 are the only number present in the input string.>

Python で文字列から数値を抽出する

この記事で説明する方法は次のとおりです。

リスト内包表記を使用して文字列から数値を抽出する そして isdigital() 方法

この問題は、split 関数を使用して文字列をリストに変換し、 リスト内包表記 これはリストを反復処理するのに役立ちます。 数字です 関数は文字列から数字を取得するのに役立ちます。



Python3




test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # using List comprehension + isdigit() +split()> # getting numbers from string> res>=> [>int>(i)>for> i>in> test_string.split()>if> i.isdigit()]> # print result> print>(>'The numbers list is :'> +> str>(res))>

>

>

出力

The original string : There are 2 apples for 4 persons The numbers list is :[2, 4]>

時間計算量: O(n)。n は入力文字列内の要素の数です。
補助スペース: O(n)。n は入力文字列内の数値の数です。

re.findall() を使用して文字列から数字を抽出する 方法

この特定の問題は、Python を使用して解決することもできます。 正規表現、 を使用できます 検索オール関数 一致する正規表現文字列を使用して数値の出現をチェックします。

TCPとUDPの比較

Python3




import> re> # initializing string> test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # getting numbers from string> temp>=> re.findall(r>'d+'>, test_string)> res>=> list>(>map>(>int>, temp))> # print result> print>(>'The numbers list is : '> +> str>(res))>

>

>

出力

The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>

isnumeric() メソッドを使用して文字列から整数を抽出する

Python では、次のようになります。 数値です この関数は、特定の要素が数値であるかどうかをユーザーに伝えることができるため、このメソッドを使用して文字列から数値を抽出することもできます。

Python3




test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # getting numbers from string> res>=> []> x>=>test_string.split()> for> i>in> x:> >if> i.isnumeric():> >res.append(>int>(i))> # print result> print>(>'The numbers list is : '> +> str>(res))>

>

>

出力

The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>

時間計算量 : O(N)
補助スペース:O(N)

Filter()関数を使用して文字列から数字を抽出します

まず、入力文字列を定義し、次に元の文字列を出力し、入力文字列を単語のリストに分割します。 スプリット() 方法。使用 フィルター() を適用してリストから数値以外の要素を除外する関数 ラムダ関数 バツ .isdigital() 各要素にリスト内包表記を使用して、フィルタリングされたリスト内の残りの要素を整数に変換します

結果として得られる整数のリストを出力します。

Python3


年月



test_string>=> 'There are 2 apples for 4 persons'> print>(>'The original string : '> +> test_string)> # use the split() method to split> # use the filter() function to filter out non-numeric elements from the list> res>=> list>(>filter>(>lambda> x: x.isdigit(), test_string.split()))> # use a list comprehension to convert the remaining elements to integers> res>=> [>int>(s)>for> s>in> res]> # print the resulting list of integers> print>(>'The numbers list is : '> +> str>(res))>

>

文字列をブール値の Java に変換

>

出力

The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>

時間計算量: O(n)。n は入力文字列の長さです。 Split() メソッドは入力文字列を単語のリストに分割するのに O(n) 時間かかり、filter() 関数はリスト内の各要素を反復してラムダ関数を適用するのに O(n) 時間かかります。リストの理解には O(k) 時間がかかります。ここで、k はフィルタリングされたリスト内の数字である要素の数であり、これは通常 n よりもはるかに小さくなります。したがって、全体の時間計算量は O(n) になります。

補助スペースの複雑さ: O(n)。split() メソッドは入力文字列と同じ長さの単語のリストを作成し、filter() 関数は最大で入力リストと同じ長さのフィルタリングされたリストを作成します。リスト内包表記では、通常は入力リストよりもはるかに小さい整数の新しいリストが作成されますが、空間の複雑さは最悪の場合でも O(n) です。したがって、補助空間全体の複雑さは O(n) です。

ループと isdigital() メソッドを使用して文字列から整数を抽出する

ループを使用して文字列内の各文字を反復処理し、それが数字であるかどうかをチェックします。 は数字() 方法。数字の場合は、リストに追加します。

Python3




test_string>=> 'There are 2 apples for 4 persons'> numbers>=> []> for> char>in> test_string:> >if> char.isdigit():> >numbers.append(>int>(char))> print>(>'The numbers list is:'>, numbers)>

>

>

出力

The numbers list is: [2, 4]>

時間計算量: O(n)。n は文字列の長さです。
補助スペース: O(k)。k は文字列の桁数です。

str.translate() と str.maketrans() を使用して文字列から数値を抽出する

入力文字列を定義し、次を使用して変換テーブルを初期化し、数字以外の文字を削除します。 str. maketrans() 。使用 str. 翻訳する() 変換テーブルを使用して文字列から数字以外の文字を削除し、結果を新しい文字列に格納します。 数値文字列 。使用 str. スプリット() を分割する 数値文字列 単語のリストに変換し、その結果を単語という新しいリストに保存します。結果の整数を格納するために数値という空のリストを初期化し、単語のリスト内の各単語を反復処理します。次を使用して単語が数値文字列であるかどうかを確認します str. は数字() 単語が数値文字列の場合は、次を使用して整数に変換します。 int() そしてそれを数値のリストに追加します。

結果として得られる整数のリストを出力します。

上記のアプローチの実装を以下に示します。

Python3




# Define the input string> test_string>=> 'There are 2 apples for 4 persons'> # Print the original string> print>(>'The original string : '> +> test_string)> # Initialize a translation table to remove non-numeric characters> translation_table>=> str>.maketrans('>', '>', '>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!'>#$%&'()*+,-./:;?@[]^_`~')> # Use str.translate() with the translation table to remove non-numeric characters> numeric_string>=> test_string.translate(translation_table)> # Use str.split() to split the string into a list of word> words>=> numeric_string.split()> numbers>=> [>int>(i)>for> i>in> words]> print>(>'The numbers list is : '> +> str>(numbers))>

>

>

出力

The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>

時間計算量: O(n)。n は入力文字列の長さです。 str.translate() メソッドと str.split() メソッドには O(n) 時間がかかり、単語のリスト内の各単語の反復処理には O(k) 時間がかかります。ここで、k はリスト内の単語の数です。数値文字列。
補助スペース: O(n)。入力文字列と同じ長さの新しい文字列と新しい単語のリストを作成し、最大長が k の整数の新しいリストを作成します。ここで、k は文字列の数です。リスト内の数値文字列である単語。

numpyモジュールを使用して文字列から数値を抽出する

文字列 test_string を初期化してから、split メソッドを使用して文字列を単語のリストに分割し、 しこり 結果のリストから配列 x を取得します。 np.char を使用する .isnumeric x のどの要素が数値であるかを示すブール マスクを作成します。このブール マスクを使用して x にインデックスを付け、数値要素のみを抽出します。次を使用して、結果の文字列配列を整数の配列に変換します。 アタイプ。

結果として得られる整数の配列を出力します。

Javaの選択ソート

Python3




import> numpy as np> # initializing string> test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # getting numbers from string using numpy> x>=> np.array(test_string.split())> res>=> x[np.char.isnumeric(x)].astype(>int>)> # print result> print>(>'The numbers list is : '> +> str>(res))> #This code is contributed by Vinay Pinjala.>

>

>

出力:

The original string : There are 2 apples for 4 persons The numbers list is : [2 4]>

時間計算量: O(n)、 ここで、n は元の文字列 test_string の長さです。これは、split メソッドでは文字列を単語のリストに分割するのに O(n) 時間がかかり、np.char.isnumeric メソッドではブール マスクの作成に O(n) 時間がかかるためです。残りの操作には一定の時間がかかります。

補助スペース: O(n)、 ここで、n は元の文字列 test_string の長さです。これは、文字列の単語を格納するために numpy 配列 x を作成するためで、これには O(n) スペースが必要です。結果として得られる整数の numpy 配列で使用されるスペースも、文字列のすべての数値要素が含まれるため、O(n) になります。