Pythonでは、for
ループを使わずに繰り返し処理を行う方法がいくつかあります。これらのテクニックを使うことで、コードが読みやすくなり、またパフォーマンスの向上も期待できます。
itertoolsを使う
itertools
モジュールを使うことで、全ての組み合わせを生み出すイテレータを生成することができます。これにより、多重forループを避けることができます。
import itertools
all_nums_iter = itertools.product(range(10), repeat=3)
result = []
for i, j, k in all_nums_iter:
summed = i*100 + j*10 + k
if i == j == k and summed >= 500:
result.append(summed)
break
print(result)
numpy.ndindexを使う
numpy.ndindex
を使うと、numpy配列の全ての値が総当たりになるようにfor文を回してくれます。
import numpy as np
all_summed_nums = np.array([[[100*i+10*j+k for i in range(10)] for j in range(10)] for k in range(10)], dtype="int")
result = []
for i, j, k in np.ndindex(all_summed_nums.shape):
summed = all_summed_nums[i,j,k]
if i == j == k and summed >= 500:
result.append(summed)
break
print(result)
再帰関数を使う
再帰関数を使うと、全探索ができます。
def dfs(depth, num):
if depth == 3:
i, j, k = list(str(num).zfill(3))
return num if i == j == k and num >= 500 else None
for i in range(10):
ret = dfs(depth + 1, num + 10**(2-depth) * i)
if ret:
return ret
print(dfs(0, 0)) # 実行結果 -> 555
これらのテクニックを使うことで、Pythonのforループを使わない繰り返し処理を実現することができます。これらのテクニックを活用して、より効率的なPythonコードを書くことができます。.