Pythonで数値とその3倍の値がリストに存在するか確認する方法
プログラミングでは、リスト内に「ある数値」と「その数値の3倍の値」が両方存在するかどうかを確認したいケースがあります。本記事では、Pythonを使ってリストを走査し、ある要素の3倍に一致する別の要素が存在するかどうかを判定する方法を解説します。
サンプルコード
以下は、その実装例です。
def check_triple_exists(my_list):
for i in range(len(my_list)):
for j in (my_list[:i]+my_list[i+1:]):
if 3*my_list[i] == j:
print("The triple exists")
my_list = [67, 34, 89, 67, 90, 15, 5]
print("The list is :")
print(my_list)
check_triple_exists(my_list)
実行結果
The list is : [67, 34, 89, 67, 90, 15, 5] The triple exists
コードの解説
まず、「check_triple_exists」という名前の関数を定義し、引数としてリストを受け取ります。
この関数はリストを走査し、各要素に3を掛けた値と一致する要素が、リスト内の他の位置に存在するかどうかを確認します。
該当する値が見つかった場合、「The triple exists(3倍の値が存在します)」というメッセージが表示されます。
関数の外側でリストを定義し、その内容をコンソールに出力します。
定義したリストを引数として渡し、関数を呼び出します。
最終的な結果がコンソールに表示されます。
補足:計算量について
上記の実装では二重ループを使用しているため、計算量はO(n²)となります。リストのサイズが大きくなると処理時間が増加する点に注意してください。なお、内側のループでは my_list[:i]+my_list[i+1:] を使って現在の要素自身を除外しているため、同じ要素を誤って比較対象にしてしまうことを防いでいます。
-
Pythonでベクトルxを90度回転・加算してベクトルyに到達できるか判定するアルゴリズム
2次元平面上に3つのベクトル x、y、z があるとします。ベクトル x を起点として、「90度(時計回り)の回転」または「ベクトル z の加算」を必要な回数だけ繰り返すことで、ベクトル y に到達できるかどうかを判定するのがこの問題です。 たとえば、入力が x = (-4, -2)、y = (-1, 2)、z = (-2, -1) である場合、出力は True になります。x に対して z を加算する操作と 90 度の時計回り回転を組み合わせることで、y = (-1, 2) の位置に到達できるからです。 解法のアプローチ この問題は、次の手順に沿って解くことができます。 1. util()
-
Pythonで配列が「ソート済みかつ回転」しているかを判定する方法
問題の概要 n個の一意な値で構成される配列があるとします。この配列が「昇順にソートされた状態から回転した配列」であるかどうかを判定してください。ただし、少なくとも1回の回転が必要なため、完全にソートされただけの配列は「ソートかつ回転」とはみなされません。 たとえば、入力が nums = [4,5,6,8,1,3] の場合、出力は True になります。この配列を2回回転すると [1, 3, 4, 5, 6, 8] という昇順の配列になるためです。 アルゴリズムの考え方 回転されたソート配列の最大の特徴は、最小値を境に配列が2つの昇順部分に分かれることです。この性質を利用して、以下の手順で判定