首页 > 解决方案 > python:迭代时增加循环

问题描述

以下代码遍历填充有递增数字的整个矩阵,并检查一行中的每个元素与前一行相同位置的元素之间的差异。对于每次迭代,如果两个元素的差小于 3,则计数器增加,然后循环中断并继续到下一行。我想做的是在每次计数器增加时尝试增加这个循环。换句话说,如果例如循环在检查前两行后遇到此条件,并且每行的长度为 3,则应考虑行长度 = 6 进行以下迭代,如果稍后再次满足此条件,则考虑行长应该是 9 等等。需要明确的是,这段代码返回 3,但根据我想要做的,它应该返回 1。

很抱歉不清楚,但这有点难以正确解释,我仍然会尽我所能,随时问我你可能有的任何具体问题,我很乐意回答。在本例中,循环从第一行 [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,6],因此即使是第 3 行和第 4 行也是一个子列表 [7,7,8,9,9,

我希望我解释得足够清楚。如果没有,请随时询问。

 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])

标签: pythonloops

解决方案


我想这就是你想要的。

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

推荐阅读