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

【Python】連続する要素を符号ごとにグループ化する方法

Pythonでは、リスト内の連続する要素を符号(プラス/マイナス)ごとにグループ化したいケースがあります。このような場合、「^」演算子(ビットごとの排他的論理和)と「enumerate」関数を組み合わせたシンプルな反復処理が非常に有効です。

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

サンプルコード

my_list = [15, -33, 12, 64, 36, -12, -31, -17, -49, 12, 43, 30, -23, -35, 53]

print("リストの内容:")
print(my_list)

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

    if element ^ my_list[index - 1] < 0:
        my_result.append([element])
    else:
        my_result[-1].append(element)

print("処理結果:")
print(my_result)

実行結果

リストの内容:
[15, -33, 12, 64, 36, -12, -31, -17, -49, 12, 43, 30, -23, -35, 53]
処理結果:
[[15], [-33], [12, 64, 36], [-12, -31, -17, -49], [12, 43, 30], [-23, -35], [53]]

処理の解説

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

  • グループ化した結果を格納するため、空のリストを要素として持つリスト([[]])を初期値として用意します。

  • enumerate関数でリストを先頭から順に走査し、現在の要素と直前の要素を「^」演算子で比較します。XOR演算の結果が0未満になるのは、2つの要素の符号が異なる場合のみです。

  • 符号が切り替わっていた場合は、その要素を新しいグループとしてリストに追加します。

  • 符号が同じである場合は、現在の末尾にあるグループに要素を追加していきます。

  • 最終的に、符号が変わるたびに区切られたグループのリストがコンソールに出力されます。

この手法のポイントは、XOR演算の性質を利用している点です。同じ符号同士(正と正、負と負)のXOR結果は正または0になりますが、符号が異なる場合は必ず負の値になります。これにより、追加のモジュールをimportすることなく、標準的な構文だけで符号ベースのグループ化を簡潔に実現できます。

  1. Pythonでリストから指定したインデックスの複数要素を削除する方法

    Pythonのリストから単一の要素を削除するのは、del文とインデックスを組み合わせれば簡単に行えます。しかし、複数のインデックスに該当する要素をまとめて削除したいケースでは、少し工夫が必要です。本記事では、削除対象となるインデックスのリストを指定して、元のリストから該当する要素だけを取り除く方法を2つ紹介します。方法1:sorted()とdelを組み合わせるこのアプローチでは、まず削除したい位置(インデックス)を格納したリストを作成します。その後、降順にソートしてから後ろの要素から順に削除することで、削除処理中にインデックスがずれる問題を回避し、元のリストの構造を保ったまま安全に要素を削除で

  2. 【初心者向け】Pythonでリストのサイズ(要素数)を取得する方法

    リスト(list)は、Pythonにおける代表的なコレクション型のデータ構造の一つです。リストの要素は後から変更でき、重複した値を持つこともできます。本記事では、Pythonでリストのサイズ(長さ)を取得する方法を解説します。具体的には、重複の有無にかかわらず、リストに含まれる全要素の数をカウントする方法を紹介します。リストの長さを取得する基本:len()関数Pythonでリストの要素数を取得するには、組み込み関数の len() を使用します。len() はリストだけでなく、タプル・文字列・辞書などさまざまなコレクションに対しても利用できる汎用的な関数です。サンプルコード以下の例では、「day