python - 如何定义涉及 for 循环的迭代函数,其中迭代器 i,j,l.. 也用于定义的迭代函数
问题描述
我正在尝试使用递归函数来简化“for-loops”下方的任何数量的循环,我可能必须根据要求运行程序。我可以在函数中不使用 i, j, k, l.. 来定义递归函数,但我不知道或者我很难使用 i,j k.. 来定义迭代函数。 . 如果有人可以帮助我的想象力,我会很高兴。
adjcent_spin_product_matrix = []
z_partial = 0
spin = [-1, 1]
for i in spin:
for j in spin:
for k in spin:
for l in spin:
for m in spin:
for o in spin:
for p in spin:
adjcent_spin_product_matrix = adjcent_spin_product_matrix + [i*j+ j*k+ k*l+ l*n+ m*o+ o*p]
解决方案
我之前的回答是反对你未经编辑的帖子,所以这里有一个更新:
从您提供的代码中,很明显您必须至少具有 fori
和j
.
自行评估该循环会给出以下列表:
[1, -1, -1, 1]
现在,您编码中的每个后续嵌套循环仅复制此列表中的每个元素,然后从前一个循环添加数组(重复两次):
i、j 和 k 循环给出[1, 1, -1, -1, -1, -1, 1, 1] + [1, -1, -1,
1, 1, -1, -1, 1] = [2, 0, -2, 0, 0, -2, 0, 2]
i、j、k 和 l 循环给出[1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1] + [1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1] + [1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1] = [3, 1, -1, 1, -1, -3, -1, 1, 1, -1, -3, -1, 1, -1, 1, 3]
等等...
因此,您可以简单地尝试以下操作:
adjacent_spin_product_matrix = []
ij_result = [1, -1, -1, 1]
def calc_product(adjacent_spin_product_matrix, number_of_indices):
if number_of_indices == 2:
return ij_result
else:
number_of_duplicates = 2 ** (number_of_indices - 2)
curr_array = []
for elem in ij_result:
for dup in range(number_of_duplicates):
curr_array.append(elem)
prev_array = calc_product(adjacent_spin_product_matrix, number_of_indices - 1)
temp_array = []
temp_array.extend(prev_array)
temp_array.extend(prev_array)
result = []
for i, elem in enumerate(curr_array):
result.append(elem + temp_array[i])
return result
现在,您应该发现:
print(calc_product([], 2)) # equivalent to i and j case
print(calc_product([], 3)) # equivalent to i, j, and k case
print(calc_product([], 4)) # equivalent to i, j, k, and l case
print(calc_product([], 5)) # equivalent to i, j, k, l, and m case
print(calc_product([], 6)) # equivalent to i, j, k, l, m, and o case
print(calc_product([], 7)) # equivalent to i, j, k, l, m, o, and p case
这些给出了预期的结果:
[1, -1, -1, 1]
[2, 0, -2, 0, 0, -2, 0, 2]
[3, 1, -1, 1, -1, -3, -1, 1, 1, -1, -3, -1, 1, -1, 1, 3]
[4, 2, 0, 2, 0, -2, 0, 2, 0, -2, -4, -2, 0, -2, 0, 2, 2, 0, -2, 0, -2, -4, -2, 0, 2, 0, -2, 0, 2, 0, 2, 4]
[5, 3, 1, 3, 1, -1, 1, 3, 1, -1, -3, -1, 1, -1, 1, 3, 1, -1, -3, -1, -3, -5, -3, -1, 1, -1, -3, -1, 1, -1, 1, 3, 3, 1, -1, 1, -1, -3, -1, 1, -1, -3, -5, -3, -1, -3, -1, 1, 3, 1, -1, 1, -1, -3, -1, 1, 3, 1, -1, 1, 3, 1, 3, 5]
[6, 4, 2, 4, 2, 0, 2, 4, 2, 0, -2, 0, 2, 0, 2, 4, 2, 0, -2, 0, -2, -4, -2, 0, 2, 0, -2, 0, 2, 0, 2, 4, 2, 0, -2, 0, -2, -4, -2, 0, -2, -4, -6, -4, -2, -4, -2, 0, 2, 0, -2, 0, -2, -4, -2, 0, 2, 0, -2, 0, 2, 0, 2, 4, 4, 2, 0, 2, 0, -2, 0, 2, 0, -2, -4, -2, 0, -2, 0, 2, 0, -2, -4, -2, -4, -6, -4, -2, 0, -2, -4, -2, 0, -2, 0, 2, 4, 2, 0, 2, 0, -2, 0, 2, 0, -2, -4, -2, 0, -2, 0, 2, 4, 2, 0, 2, 0, -2, 0, 2, 4, 2, 0, 2, 4, 2, 4, 6]
推荐阅读
- php - 当前数据和数据之间的Woocommerce区别
- amazon-web-services - AWS DynamoDB:如何将表的元素下载为 .json 文件?
- flask - 为什么邮递员 POST 方法不提供 `json` 格式的参数?
- json - 在数据工厂中修改 JSON 数据结构
- vue.js - Vue点击防止触发器
- reactjs - React Hook 表单错误 - 类型“UseFormRegister”
' 不可分配给类型 'LegacyRef | 不明确的' - javascript - 如何在下拉菜单打开时取消它
- python - 500 Internal Server Error 某些但不是其他
- spring-boot - 更新子实体会更新 Spring boot 中的两个父子类审计标记。如何为 lastUpdated 字段设置单独的审核戳?
- android - 如何在 React Native 中获取子字符串