如何在Python中实现嵌套循环

-2 投票
4 回答
15905 浏览
提问于 2025-04-18 12:49

目前我有一个程序,它会遍历一组向量坐标,并对这两个向量进行简单的数学运算。不过我想在程序里加一个循环,嵌套在另一个循环里面,这样我就能更好地控制程序的运行。以下是我现在的程序:

import operator
import numpy as np
b = 0
a = 1
for a in range(0,56): 
    vector1 = (int(l[b][0]),int(l[b][1]),int(l[b][2]))
    vector2 = (int(l[a][0]),int(l[a][1]),int(l[a][2]))
#print vector1
#print vector2
    x = vector1
    y = vector2
vector3 = list(np.array(x) - np.array(y))
#print vector3
    dotProduct = reduce( operator.add, map( operator.mul, vector3, vector3))
    print dotProduct
    a += 1

我想要的效果是,当a的值达到56并完成最后一次运算后,我希望b的值加1,同时a的值重置为0,然后重新进行运算,直到b的值增加到55为止。

期望的输出结果是:

坐标示例:

Cu 46.7176 27.1121 27.1121

Cu 43.2505 36.0618 32.4879

Cu 43.3392 36.0964 28.9236

Cu 43.2509 37.8362 27.1091

Cu 34.4872 14.1794 16.5767

Cu 34.4103 16.0364 14.3521

Cu 32.7006 14.069 14.412

我希望第一个坐标能和下面的所有坐标进行点积运算,然后再回到第一个坐标,接着用第二个坐标和下面的所有坐标进行点积运算,依此类推……

4 个回答

0

如果我理解你的问题,你有一个二维矩阵,大小是 (56, 2),也就是说它有56行和2列。对于每一行,

  • 你在计算它们之间的差值,
  • 然后把这个差值平方,
  • 最后把所有得到的结果加起来,形成一个一维的向量。

用集合的表示法来说就是这样:

{∑({(row_1 - row_0)^2 | row_1 ∈ Matrix}) | row_0 ∈ Matrix}

因为你已经在使用numpy,所以这个解决方案非常简单直接。

[np.sum((l - row)**2) for row in l]
0

你可以用while循环来代替for循环:

b = 0
a = 0

while a <= 56 :
    import operator
    import numpy as np
    vector1 = (int(l[b][0]), int(l[b][1]), int(l[b][2]))
    vector2 = (int(l[a][0]),int(l[a][1]),int(l[a][2]))
    #print vector1
    #print vector2
    x = vector1
    y = vector2
    vector3 = list(np.array(x) - np.array(y))
    #print vector3
    dotProduct = reduce( operator.add, map( operator.mul, vector3, vector3))
    print dotProduct


    if a == 56 :
        b += 1
        a = 0
    else:        
        a += 1

    if b == 55:
        break
4

你可以使用嵌套的for循环。下面是你想要的代码:

for b in range(0, 56):
    for a in range(0, 57):
3

先运行这个看看结果是什么(在你问下一个问题之前)

for b in range(56):
    for a in range(57):
        print "a:", a, "b:", b

对评论中问题的回答:

你可以在内层循环中使用 b 作为参数

for b in range(56):
    for a in range(b+1, 57):
        print "a:", a, "b:", b

你可以试着用更小的范围,这样可以在一个屏幕上看到所有结果

for b in range(6):
    for a in range(b+1, 7):
        print "a:", a, "b:", b

结果:

a: 1 b: 0
a: 2 b: 0
a: 3 b: 0
a: 4 b: 0
a: 5 b: 0
a: 6 b: 0
a: 2 b: 1
a: 3 b: 1
a: 4 b: 1
a: 5 b: 1
a: 6 b: 1
a: 3 b: 2
a: 4 b: 2
a: 5 b: 2
a: 6 b: 2
a: 4 b: 3
a: 5 b: 3
a: 6 b: 3
a: 5 b: 4
a: 6 b: 4
a: 6 b: 5

撰写回答