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

Pythonでリスト内の符号変化のインデックスを取得する方法

リストの中で値の符号が正から負へ、または負から正へと切り替わる位置(インデックス)を取得したい場合、シンプルなforループによる反復処理と「append」メソッドを組み合わせるだけで簡単に実現できます。本記事では、基本的な実装例とその詳しい解説に加え、より簡潔に書くための応用テクニックも紹介します。

サンプルコード

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

my_list = [71, 24, -34, -25, -76, 87, 29, -60, 70, 8]

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

my_result = []
for index in range(0, len(my_list) - 1):
    if (my_list[index] > 0 and my_list[index + 1] < 0) or (my_list[index] < 0 and my_list[index + 1] > 0):
        my_result.append(index)

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

実行結果

The list is :
[71, 24, -34, -25, -76, 87, 29, -60, 70, 8]
The result is :
[1, 4, 6, 7]

コードの解説

  • まず、整数値を含むリストを定義し、その内容をコンソールに表示します。

  • 次に、符号が変化した位置を格納するための空のリストmy_resultを用意します。

  • forループでリストを先頭から末尾の一つ手前まで走査し、隣り合う2つの要素my_list[index]とmy_list[index + 1]の符号が異なるかどうかを条件式で判定します。

  • 条件を満たした場合(つまり符号が変化している場合)、そのインデックスをmy_resultに追加します。

  • 最後に、結果として得られたインデックスのリストをコンソールに出力して完了です。

補足:リスト内包表記でより簡潔に書く方法

隣接する2つの要素の積が負になることは、符号が変化していることと等しいため、リスト内包表記を使えば次のように1行で書くこともできます。

my_result = [i for i in range(len(my_list) - 1) if my_list[i] * my_list[i + 1] < 0]
print(my_result)  # [1, 4, 6, 7]
  1. 【Python入門】リストから一意の値(重複しない要素)だけを抽出して出力する方法

    リストが与えられたとき、その中から重複を除いた一意の値(ユニークな要素)だけを取り出して表示するのが、この記事の目的です。Pythonを使えば、初心者でも簡単に実装できる定番の処理なので、ぜひマスターしておきましょう。実行例入力:A = [1, 2, 3, 4, 2, 1, 9] 出力:[1, 2, 3, 4, 9]リスト内に同じ値が複数回現れていても、出力されるのはそれぞれ1回だけです。アルゴリズムステップ1:ユーザーからリストを入力として受け取る。 ステップ2:空のリストを作成する。 ステップ3:元のリストの全要素を順番に走査する。 ステップ4:その要素がすでに一意のリストに存在するかどう

  2. Pythonでリストのすべてのサブリストを生成して出力する方法

    リストが与えられたとき、そのリストに含まれるすべてのサブリスト(部分リスト)を生成して出力するプログラムを紹介します。要素数 n のリストの場合、空のリストを含めるとサブリストの総数は n×(n+1)/2+1 個になります。 実行例 入力 : list = [1, 2, 3] 出力 : [], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3] アルゴリズム 考え方はシンプルです。開始位置 i と終了位置 j の組み合わせをすべて試し、スライスで部分リストを取り出します。 ステップ1 : 対象となるリストを用意します。 ステップ2 : 結果を格納するため、最