首页 > 解决方案 > 在进入下一个外部循环增量之前,如何让内部 for 循环一直运行?

问题描述

我正在制作一个我为 uni 项目编写的程序更广泛,在我使用 3x3 矩阵之前,但现在它是一个 15 x 15 矩阵,我想制作一个 for 循环来填充值,而不是我目前有。我已经使这个示例代码更小了,但这是我想要放入 for 循环的内容:

distance_matrix=
[array1[0]-array2[0], array1[1]-array2[0], array1[2]-array2[0], array1[3]-array2[0],array1[4]-array2[0]],
[array1[0]-array2[1], array1[1]-array2[1], array1[2]-array2[1], array1[3]-array2[1],array1[4]-array2[1]],
[array1[0]-array2[2], array1[1]-array2[2], array1[2]-array2[2], array1[3]-array2[2],array1[4]-array2[2]],
[array1[0]-array2[3], array1[1]-array2[3], array1[2]-array2[3], array1[3]-array2[3],array1[4]-array2[3]],
[array1[0]-array2[4], array1[1]-array2[4], array1[2]-array2[4], array1[3]-array2[4],array1[4]-array2[4]]                

所以这是一个 5x5 矩阵。如您所见,每个条目的值是 2 个数组中的值之间的差异。我首先想到的循环是一个 2 层嵌套的 for 循环,但它只生成一个 5x1 矩阵,对角线上的值是 (i,i) 值。它看起来像这样:

distance_matrix=[[0 for x in range(0,5)] for y in range(0,5)]
for i range(0,5):
    for j in range(0,5):
        distance_matrix[i][j]=array1[i]-array2[j]

然后我尝试了一个 if 语句,只是一个我可以重塑的列表,并设置在外循环中的行上保持不变的值,但这再次生成了一个长度为 5 的列表(我真的不知道为什么) :

distance_matrix_list=[]
    for col_val in range(0,5):
        first_value=array1[col_val]
        for row_val in range(0,5)):
            if row_val<5):
                distance_matrix_list.append([first_value-array2[row_val]])
        
        distance_matrix=np.array(distance_matrix_list)
        distance_matrix.reshape((5,5))

这一定很明显,我很沮丧,因为我错过了这一点。请帮忙!

标签: pythonfor-loopiteration

解决方案


您的第一个代码片段,除了一些拼写错误之外应该可以正常工作。但是,在分配索引时,您确实需要切换 i 和 j。这对我来说很好:

distance_matrix=[[0 for x in range(5)] for y in range(5)]
for i in range(5):
    for j in range(5):
        distance_matrix[i][j] = array1[j] - array2[i]

推荐阅读