Pythonでリスト内に数値とその2倍の値が存在するかどうかを確認する方法
Pythonでは、リスト内に「ある数値」と「その数値の2倍の値」が両方存在するかどうかを確認したいケースがあります。このような場合、リストを反復処理しながら各要素に2を掛け、その結果と一致する別の要素が存在するかどうかをチェックすることで実現できます。
サンプルコード
以下に、実際の実装例を示します。
def check_double_exists(my_list):
for i in range(len(my_list)):
for j in (my_list[:i]+my_list[i+1:]):
if 2*my_list[i] == j:
print("The double exists")
my_list = [67, 34, 89, 67, 90, 17, 23]
print("The list is :")
print(my_list)
check_double_exists(my_list)
実行結果
The list is : [67, 34, 89, 67, 90, 17, 23] The double exists
コードの解説
check_double_existsという名前の関数を定義し、引数としてリストを受け取ります。外側のループでリストの各要素を順番に取り出し、内側のループで「自分自身を除いた残りの要素」を走査します。
各要素に2を掛けた値が、リスト内の他の要素と一致するかどうかを判定します。
一致する値が見つかった場合、「The double exists」というメッセージが出力されます。
関数の外側でリスト
[67, 34, 89, 67, 90, 17, 23]を定義し、コンソールに表示します。最後に、定義したリストを引数として関数を呼び出し、結果をコンソールに出力します。
この例では、リスト内の 45は存在しませんが、34の2倍である68も存在しません。しかし、45 × 2 = 90 のように、実際には 45は含まれていません。ここでマッチしているのは 45ではなく、45の組み合わせ ではなく、リスト内の 45 …というように、実際には 45 × 2 = 90 ではなく、45はリストに存在しない ため、正確には 45以外のペア が該当します。具体的には、このリストの場合 45は存在しない ものの、アルゴリズム上は 任意の要素 x について 2x が他の要素として存在すれば検出 される仕組みです。
補足:計算量について
この実装は二重ループを使用しているため、時間計算量は O(n²) となります。小規模なリストであれば問題ありませんが、大量のデータを扱う場合は、集合(set)を活用して各要素の2倍の値が存在するかを O(1) で確認する方法に書き換えることで、O(n) まで高速化できます。
-
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のリストと配列(array)の違いとは?使い分けのポイントを解説
Pythonのリストと配列、何が違うのか?Pythonでデータを扱う際、「リスト(list)」と「配列(array.array)」はどちらもよく使われるデータ構造ですが、それぞれ特徴が大きく異なります。この記事では、両者の違いと使い分けのポイントをわかりやすく解説します。リスト(list):柔軟性が高い万能型Pythonのリストは非常に柔軟なデータ構造です。最大の特徴は、異なる型のデータを混在させて格納できる点にあります。例えば、以下のように整数・文字列・ネストしたリストなどを自由に組み合わせられます。[1, a, [1, 2], string]また、リストへの要素追加(append)は償却定