如何在python中循环内部循环

时间:2014-07-10 16:50:02

标签: python loops math for-loop

目前我有一个程序,它通过一个矢量坐标列表,并对两个向量执行一个简单的数学函数,但我想在一个循环内部做一个循环,以便能够对发生的事情有更多的控制,这个到目前为止是我的计划:

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

但我想要的是,一旦命中56并完成最终的运行,我希望B加1和a重置为零,并重做操作循环直到b上升到55.

期望的输出: coordiantes的例子:

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 :(得分:4)

你可以做一个嵌套的for循环。以下是你想要的:

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

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:0)

如果我理解你的问题陈述,你有一个维度的二维矩阵(56,2),并且对于每一行,

  • 你找到了差异
  • 盯着它
  • 累积所得到的1D向量的总和

或以集合表示法

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

因为你已经在使用numpy,这是一个直接的解决方案

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