Pythonでネストされたリストを指定数ごとにグループ化してフラット化する方法
このチュートリアルでは、サブリスト(入れ子になったリスト)を含むリストを、指定した数ごとにグループ化しながらフラット化するプログラムを作成します。具体的には、与えられた数値を基準に、サブリストをその数だけずつまとめて1つのリストへ結合していきます。まずは例を見て、動作を確認しましょう。
入力例
lists = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]] number = 2
出力例
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10]]
この例では number = 2 なので、2つのサブリストずつを取り出して1つのリストにまとめています。最後の [9, 10] のように、残りの要素が指定数に満たない場合でも、そのまま出力される点に注目してください。
解き方の手順
- リストと、グループ化する数(number)を初期化します。
- 結果を格納するための空のリストを用意します。
- range(0, len(lists), number) を使って、number個ずつスキップしながらリストを反復処理します。
- スライス lists[i:i+number] で、該当する範囲のサブリストを取得します。
- 取得したサブリスト内の全要素を1つのリストにまとめ、結果リストに追加します。
- 最後に結果を出力します。
コード例
# リストの初期化
lists = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
number = 2
# 結果を格納する空のリスト
result = []
# number個ずつサブリストを取り出して反復処理
for i in range(0, len(lists), number):
# 指定された範囲のサブリストをフラット化して追加
result.append([element for sub_list in lists[i: i + number] for element in sub_list])
# 結果の出力
print(result)
実行結果
上記のコードを実行すると、次のような結果が得られます。
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10]]
コードのポイント
このプログラムの核心は、リスト内包表記 [element for sub_list in lists[i: i + number] for element in sub_list] の部分です。まず lists[i: i + number] でnumber個のサブリストを取り出し、続いて各サブリストから要素を順番に取り出すことで、複数のサブリストを1つのフラットなリストへ変換しています。
別の方法:itertools.chain を使う
標準ライブラリの itertools.chain.from_iterable() を利用すると、より簡潔に記述することもできます。
from itertools import chain
lists = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
number = 2
result = [list(chain.from_iterable(lists[i: i + number]))
for i in range(0, len(lists), number)]
print(result) # [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10]]
まとめ
本チュートリアルでは、range() のステップ機能とスライス、リスト内包表記を組み合わせることで、ネストされたリストを指定した数ごとにグループ化してフラット化する方法を学びました。大規模なデータを扱う場合は、パフォーマンスに優れた itertools 版の活用も検討してみてください。内容について不明な点がある場合は、コメント欄でお気軽にお尋ねください。
-
Pythonでリスト内の最小値を見つける方法を解説
この記事では、リストの中から最小の数値を見つける方法について、具体的なサンプルコードとともに詳しく解説します。問題の概要問題: 数値のリストが与えられたとき、その中に含まれる最も小さい数値を画面に表示すること。この問題を解くアプローチは主に2つあります。ひとつは sort() メソッドを使ってリストを昇順に並べ替え、先頭の要素(インデックス0)を取得する方法。もうひとつは、Pythonに標準で用意されている組み込み関数 min() を使う方法です。それぞれ順番に見ていきましょう。方法1:sort()メソッドで並べ替えて最小値を取得するまずはリストを昇順にソートし、先頭の要素を取り出す方法です。
-
Pythonで階乗を計算する3つの方法|forループ・再帰・math.factorial()の使い方
階乗(factorial)の計算は、データ分析をはじめとする数学的な処理において、Pythonでよく求められる操作の一つです。階乗とは、正の整数 n に対して、1から n までのすべての整数を掛け合わせた値のことです(例:5! = 1 × 2 × 3 × 4 × 5 = 120)。この記事では、Pythonで階乗を求める3つの方法を、コード例と実行結果とともにわかりやすく解説します。方法1:forループを使うforループで1から目的の数値まで順番に処理し、各ステップで掛け算を繰り返していく方法です。以下のプログラムでは、ユーザーに数値の入力を促し、ループ処理の前にint()で入力値を整数に変換