Pythonのリストのリストで三角不等式をチェックする方法
三角形において、任意の2辺の長さの和は、必ず残りの1辺よりも大きくなります。これを三角不等式と呼びます。本記事では、Pythonのリストのリスト(ネストされたリスト)の中から、この三角不等式が成立するサブリストを特定する方法を、2つの異なるアプローチで解説します。
方法1:forループと比較演算子を使う
まず、すべてのサブリストを昇順にソートします。こうすることで、各サブリストの最後の要素が必ず最大の辺になります。そのうえで、最初の2つの要素(短い2辺)の合計が3番目の要素(最も長い辺)より大きいかどうかを確認すれば、三角不等式が成り立つかどうかを判定できます。
サンプルコード
Alist = [[3, 8, 3], [9, 8, 6]]
# リストの各サブリストをソート
for x in Alist:
x.sort()
# 三角不等式の判定
for e in Alist:
if e[0] + e[1] > e[2]:
print("三角不等式が成立するサブリスト:", e)
実行結果
上記のコードを実行すると、次の出力が得られます。
三角不等式が成立するサブリスト: [6, 8, 9]
方法2:リスト内包表記を使う
こちらの方法でも、まずサブリストをソートしておきます。その後、リスト内包表記を使って各サブリストを走査し、三角不等式を満たすものだけを抽出します。処理を簡潔に1行で書けるのが大きな特徴です。
サンプルコード
Alist = [[3, 8, 3], [9, 8, 6]]
# リストの各サブリストをソート
for sub in Alist:
sub.sort()
# リスト内包表記で三角不等式を満たすサブリストを抽出
result = [(x, y, z) for x, y, z in Alist if x + y > z]
print("三角不等式が成立するサブリスト:")
for r in result:
print(r)
実行結果
上記のコードを実行すると、次の出力が得られます。
三角不等式が成立するサブリスト: (6, 8, 9)
ポイントのまとめ
- ソートが重要: サブリストを事前にソートしておけば、「最も長い辺 < 残りの2辺の和」という1つの条件だけで判定できます。
- 比較演算子の使い分けに注意: 「>」を使うと厳密な三角形のみを検出できます。「>=」に変更すると、3点が同一直線上に並ぶ退化したケース(例:[1, 2, 3])も含まれるようになります。
- 使い分けの目安: 処理が単純な場合はforループ、条件によるフィルタリングが中心ならリスト内包表記が適しています。
-
Pythonでリストを定義する方法とは?基本の書き方を初心者向けに解説
リスト(List)は、Pythonにおける基本的なシーケンス型データ構造の一つです。複数の要素を角括弧 [ ] で囲み、カンマで区切って表現します。各要素は文字列や数値など異なるデータ型が混在していても問題ありません。また、リストは順序付き(ordered)コレクションであるため、格納した要素の並び順は保持されます。個々の要素には、0から始まるインデックスを使ってアクセスできます。たとえば最初の要素はインデックス 0、2番目の要素は 1 で参照します。リストの定義例list1 = [physics, chemistry, 1997, 2000] list2 = [1, 2, 3, 4, 5]
-
Pythonリスト入門:作成から操作、削除まで徹底解説
このチュートリアルでは、Pythonのリスト(List)について学びます。リストの作成方法、要素へのアクセス、要素の追加・削除、リスト自体の削除など、基本的な操作を一つずつ丁寧に解説していきます。 Pythonでは、リストは角括弧 [] を使って構築し、各要素はカンマ , で区切って記述します。 Pythonのリストは、異なる型のオブジェクトを混在させて格納できるのが特徴です。すべて文字列である必要も、整数である必要もありません。例えば、以下のように複数の型が混ざったリストを作成できます。mixedTypesList = [a, True, 1, 1.0] リストの作成方法 リストは、角括弧