データ型間の相互変換は、Python ライブラリによって非常に簡単に行われます。しかし、文字列のリスト全体を整数に変換するという問題は、開発ドメインでは非常に一般的です。この特定の問題を解決するためのいくつかの方法について説明しましょう。
eval() を使用してリスト内のすべての文字列を整数に変換する
Python eval() 関数 式引数を解析して Python 式として評価し、Python 式(コード) を実行します。式が int 表現の場合、Python は引数を整数に変換します。
Python3
lis> => [> '1'> ,> '-4'> ,> '3'> ,> '-6'> ,> '7'> ]> res> => [> eval> (i)> for> i> in> lis]> print> (> 'Modified list is: '> , res)> |
>
>
Javaの文字列を逆にする
出力:
Modified list is: [1, -4, 3, -6, 7]>
リスト内のすべての文字列を整数に変換する単純な方法
これは、この種の操作を実行するときにプログラマが遭遇する最も一般的な方法です。リスト全体をループし、型キャストによってリストの各文字列を int に変換するだけです。
Python3
test_list> => [> '1'> ,> '4'> ,> '3'> ,> '6'> ,> '7'> ]> # using loop> for> i> in> range> (> 0> ,> len> (test_list)):> > test_list[i]> => int> (test_list[i])> # Printing modified list> print> (> 'Modified list is : '> +> str> (test_list))> |
>
>
出力:
Modified list is: [1, 4, 3, 6, 7]>
リスト内のすべての文字列を整数に変換する リストの内包表記
これは上記のメソッドの一種のレプリカであり、開発者が常に探す一種の省略表現であるリスト内包表記を使用して実装されています。これにより、ソリューションのコーディングにかかる時間と複雑さが節約されます。
Python3
test_list> => [> '1'> ,> '4'> ,> '3'> ,> '6'> ,> '7'> ]> # using list comprehension to> # perform conversion> test_list> => [> int> (i)> for> i> in> test_list]> > # Printing modified list> print> (> 'Modified list is : '> +> str> (test_list))> |
>
>
出力:
Modified list is : [1, 4, 3, 6, 7]>
リスト内のすべての文字列を整数に変換する 地図()
これは、この特定のタスクを実行するための最もエレガントでPython的で推奨される方法です。この関数はこの種のタスク専用に作成されており、これらのタスクを実行するために使用する必要があります。
Python3
test_list> => [> '1'> ,> '4'> ,> '3'> ,> '6'> ,> '7'> ]> # using map() to> # perform conversion> test_list> => list> (> map> (> int> , test_list))> # Printing modified list> print> (> 'Modified list is : '> +> str> (test_list))> |
>
>
出力:
Modified list is : [1, 4, 3, 6, 7]>
リスト内のすべての文字列を整数に変換する 混合整数表現を含む文字列のリスト
ここでは、まず各文字列を浮動小数点に変換し、次にround()関数を使用して整数に変換します。変換しないとエラーがスローされます。
Python3
lis> => [> '1.1'> ,> '4'> ,> '3.5'> ,> '6.7'> ,> '7.2'> ]> res> => [> round> (> float> (i))> for> i> in> lis]> print> (> 'Modified list is: '> , res)> |
>
>
出力:
Modified list is: [1, 4, 4, 7, 7]>
リスト内のすべての文字列を整数に変換する ast モジュールの ast.literal_eval() 関数を使用する
文字列のリストを整数のリストに変換するために使用できるもう 1 つのアプローチは、ast モジュールの ast.literal_eval() 関数を使用することです。この関数を使用すると、文字列を Python リテラルとして評価できます。つまり、数値、リスト、辞書などの Python 式を含む文字列を解析して評価できます。
ast.literal_eval() を使用して文字列のリストを整数のリストに変換する方法の例を次に示します。
Python3
import> ast> # Initialize list of strings> test_list> => [> '1'> ,> '4'> ,> '3'> ,> '6'> ,> '7'> ]> # Convert strings to integers using ast.literal_eval()> test_list> => [ast.literal_eval(s)> for> s> in> test_list]> # Print resulting list> print> (> 'Modified list:'> , test_list)> #This code is contributed by Edula Vinay Kumar Reddy> |
>
>出力
Modified list: [1, 4, 3, 6, 7]>
ast モジュールの ast.literal_eval() 関数を使用して文字列のリストを整数のリストに変換する場合の時間計算量は O(n) です。ここで、n はリストの長さです。これは、このアプローチの実行に必要な時間が入力リストのサイズに正比例することを意味します。
空間複雑さの観点から見ると、このアプローチでは入力リストと同じサイズの整数の新しいリストが作成されるため、空間複雑さは O(n) になります。
numpy.array() 関数を使用してリスト内のすべての文字列を整数に変換する
- 文字列のリストを定義する
- numpy.array() 関数を使用して、リストを int 型の numpy 配列に変換します。
- 次を使用して numpy 配列をリストに変換します。 list() 関数
- 変更されたリストを印刷する
Python3
import> numpy as np> > # Define list of strings> my_list> => [> '1'> ,> '4'> ,> '3'> ,> '6'> ,> '7'> ]> > # Convert list to numpy array of type int> my_array> => np.array(my_list, dtype> => int> )> > # Convert numpy array back to list> modified_list> => list> (my_array)> > # Print modified list> print> (> 'Modified list is: '> , modified_list)> |
>
>
出力:
Modified list is: [1, 4, 3, 6, 7]>
時間計算量: このアプローチの時間計算量は O(n) です。ここで、n はリストの長さです。 numpy.array() 関数は新しい配列を作成するのに O(n) 時間かかり、list() 関数は配列をリストに変換するのに O(n) 時間かかります。
空間複雑度: このアプローチの空間複雑度は、入力リストと同じサイズの int 型の新しい numpy 配列を作成するため、O(n) です。
アプローチ: json.loads() 関数の使用:
アルゴリズム:
- 値 ['1', '4', '3', '6', '7'] を含む文字列のリスト test_list を作成します。
- join() メソッドを使用して test_list 内の文字列をカンマで結合すると、文字列「1,4,3,6,7」が得られます。
- 結果の文字列を角括弧で囲み、文字列「[1,4,3,6,7]」となります。
json ライブラリのloads() メソッドを使用して文字列を JSON 配列として解析すると、リスト [1, 4, 3, 6, 7] が得られます。 - 結果のリストを new_list に割り当てます
- 文字列 Modified list is : を出力し、その後に new_list の文字列表現を続けます。
Python3
import> json> test_list> => [> '1'> ,> '4'> ,> '3'> ,> '6'> ,> '7'> ]> new_list> => json.loads(> '['> +> ','> .join(test_list)> +> ']'> )> print> (> 'Modified list is : '> +> str> (new_list))> #This code is contributed by Vinay pinjala> |
>
>出力
Modified list is : [1, 4, 3, 6, 7]>
時間計算量: O(n)、 ここで、n は test_list の長さです。これは、join() メソッドでは文字列の連結に O(n) 時間がかかり、loads() メソッドでは結果の文字列の解析に O(n) 時間がかかるためです。
空間複雑さ: O(n)、 結果のリストはメモリ内で O(n) スペースを占有するためです。
reモジュールを使用してリスト内のすべての文字列を整数に変換する
文字列のリストから数値を抽出するための正規表現アプローチの段階的なアルゴリズム
JavaScriptのif文
- 文字列の入力リストを定義します。
- 文字列内の数値と一致する正規表現パターンを定義します。
- 変換された数値を格納する空のリストを初期化します。
- 入力リスト内の各文字列を反復処理します。
- 正規表現パターンを使用して、文字列内の数値を検索します。
- 一致するものが見つかった場合は、一致した部分文字列を抽出し、それを浮動小数点数に変換します。
- 変換された値を出力リストに追加します。
- 入力リスト内のすべての文字列が処理されたら、出力リストを返します。
Python3
import> re> # Define the input list> lis> => [> '1'> ,> '-4'> ,> '3'> ,> '-6'> ,> '7'> ]> # Define a regular expression pattern to match numerical values> pattern> => re.> compile> (r> '-?d+(?:.d+)?'> )> # Initialize an empty list to store converted values> res> => []> # Iterate over each string in the input list> for> s> in> lis:> > # Use the pattern to search for a numerical value in the string> > match> => pattern.search(s)> > # If a match is found, extract the matched substring and convert it to a float> > if> match> is> not> None> :> > res.append(> int> (match.group()))> # Print the modified list of converted values> print> (> 'Modified list is: '> , res)> |
>
>出力
Modified list is: [1, -4, 3, -6, 7]>
時間計算量: このアプローチの時間計算量は O(nm) です。ここで、n は入力リスト内の文字列の数、m はリスト内の文字列の最大長です。正規表現パターンはリスト内の各文字列に適用する必要があり、最悪の場合でも O(m) 時間がかかります。したがって、全体の時間計算量は O(nm) になります。
補助スペースの複雑さ: このアプローチの補助空間の複雑さは O(k) です。ここで、k は入力リスト内の数値の数です。変換された各数値を出力リストに格納する必要があるため、O(k) スペースが必要です。さらに、定数スペースを必要とする正規表現オブジェクトを保存する必要があります。したがって、補助空間全体の複雑さは O(k) になります。