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

【Python】リスト内包表記とenumerateでインデックス値を繰り返す方法

Pythonでは、リストの各要素の値に応じて、そのインデックス番号を繰り返した新しいリストを生成したいケースがあります。例えば、要素が「4」ならインデックス「0」を4回、「3」ならインデックス「2」を3回繰り返すといった処理です。このような操作は、リスト内包表記(list comprehension)と組み込み関数「enumerate」を組み合わせることで、シンプルかつ効率的に実現できます。

サンプルコード

以下に具体的な実装例を示します。

my_list = [4, 0, 3, 1]

print("The list is :")
print(my_list)

my_result = [element for sub in ([index] * element for index, element in enumerate(my_list)) for element in sub]

print("The result is :")
print(my_result)

出力結果

The list is :
[4, 0, 3, 1]
The result is :
[0, 0, 0, 0, 2, 2, 2, 3]

コードの解説

  • まず、対象となるリストを定義し、コンソールに表示します。

  • リスト内包表記を使って、リストの各要素とそのインデックス値を反復処理します。

  • enumerate」関数により、リストの各要素に自動的にインデックス番号が割り当てられます。

  • 内側の [index] * element の部分では、各インデックスをその要素の値の回数だけ繰り返したリストを作成しています。例えば、インデックス0・要素4の場合は [0, 0, 0, 0] が生成されます。

  • これらの部分リストを平坦化(フラット化)して1つのリストにまとめ、変数に代入します。

  • 最終的な結果がコンソールに出力されます。

この手法を使えば、ループを明示的に書くことなく、要素の値に基づいてインデックスを繰り返すリストを1行で生成できます。データの前処理や重み付け処理など、さまざまな場面で活用できるテクニックです。

  1. Pythonの異種リスト(文字列と数値が混在)から最小値・最大値を取得する方法

    Pythonのリストは、文字列と数値を同時に格納することができます。このようなリストは「異種リスト(ヘテロジニアスリスト)」と呼ばれます。本記事では、こうした混在リストの中から、数値のみを対象に最小値と最大値を求める方法を解説します。最小値を求める方法まずは最小値の取得方法です。ここでは isinstance() 関数を使って、リスト内に含まれる整数だけを抽出し、その結果に対して組み込み関数 min() を適用することで最小値を求めます。コード例listA = [12, Sun, 39, 5, Wed, Thus] # 元のリスト print(元のリスト : , listA) # 整数のみ

  2. Pythonでリストの各サブリストに新しい要素を追加する方法

    Pythonのプログラミングでは、既存のリストに対して新しい値を追加したい場面がよくあります。特に、ネストされたリスト(リストの中にリストが入った構造)の各サブリストに、同じ値や複数の値を一括して追加する方法は、データ処理において非常に便利です。本記事では、既存のリストの各要素(サブリスト)と新しい値を組み合わせて挿入するための、2つの代表的な手法をわかりやすく解説します。方法1:リスト内包表記(forループ)を使うすべてのサブリストが同じ長さを持っている場合は、リスト内包表記を使うことで、簡潔に新しい値を各サブリストへ追加できます。アンパック(展開)を利用することで、コードが読みやすくなるの