python:迭代时增加循环



以下代码遍历用递增数字填充的整个矩阵,并检查一行中的每个元素与前一行相同位置的元素之间的差异。对于每一次迭代,如果两个元素的差小于3,则计数器增加,然后循环中断并继续到下一行。我想做的是,每次出现反增长时,都尝试增加这个循环。换言之,例如,如果循环在检查前两行之后进入该条件,并且每行的长度为3,则应在考虑行长度=6的情况下进行以下迭代,并且如果稍后再次满足该条件,则所考虑的行长度应为9,依此类推。需要明确的是,这段代码返回3,但根据我想要做的,它应该返回1。我不确定这在python中是否可行,但我很乐意考虑这些建议。

我很抱歉没有说清楚,但这有点难以正确解释,我仍然会尽我所能,随时问我任何你可能有的具体问题,我很乐意回答。在这个例子中,循环从第一行[1,2,4]中减去第二行[4,6,6],并且由于4-1=3,6-2=4和6-4=2,只有后者小于3,因此k增加1。然后在具有第二行的第三行中,7-6=1,其<3,因此8-6不需要检查,这里k也增加了1,所以现在我们有k=2,在最后一行,[9,9,10]-[7,7,8]给了我们小于3的元素,因此我们的k=3。现在,我要做的是:一旦[4,6,6]-[1,2,4]将k增加1,我希望第一行和第二行被视为一个子列表[1,2,4,4,6],因此即使第三行和第四行也将是一个子列表[7,7,7,8,9,9,10],从中减去[1,2,4,4,6,6],这不会增加k,因为没有元素的差小于3。如果我们假设这个例子有额外的行,那么对于每增加一个k,每次都应该通过扩大3个额外元素的子列表长度来"重塑"矩阵。

我希望我已经足够清楚地解释了这一点。如果没有,请随意询问。

matrix=[[1,2,4],
[4,6,6],
[7,7,8],
[9,9,10]]
cell_list=[]
for row in matrix:
for cell in row:
cell_list.append(cell)
len_cell_list=(len(cell_list))
len_matrix_row=len(matrix[0])
k=0
k_list=[]
for i in range(1,len(matrix)):
for j in range(len_matrix_row):
if abs(matrix[i][j]-matrix[i-1][j])<3:
k+=1
k_list.append(k)
break
continue
print(k_list[-1])

我想这就是你想要的。

import numpy
matrix=[[1,2,4],
[4,6,6],
[7,7,8],
[9,9,10]]
k = 0
end_of_matrix = False
changing_matrix = matrix[:]
while not end_of_matrix:
end_current_loop = False
for i in range(1, len(changing_matrix)):
for j in range(len(changing_matrix[i])):
if abs(changing_matrix[i][j] - changing_matrix[i-1][j]) < 3:
k += 1
end_current_loop = True
break
if end_current_loop:
break
if not end_current_loop:
end_of_matrix = True
else:
changing_matrix = []
for i in range(0, len(matrix), k+1):
changing_matrix.append(list(numpy.concatenate(matrix[i:i+k+1])))
print(changing_matrix)
print(k)

输出:

[[1, 2, 4, 4, 6, 6], [7, 7, 8, 9, 9, 10]]
1

最新更新