Python:4表示循环,比较列表项

Python:4表示循环,比较列表项,python,cycle,Python,Cycle,我有一个相当可怕的算法来比较原子之间的距离,但它的工作原理与我希望的不同。代码如下: for k in ResListA: for n in ResListB: for m in ResListA[counter3].atoms: for z in ResListB[counter4].atoms: coordDist = distance.distance(ResListA[counter3].atoms[counter4],ResListB

我有一个相当可怕的算法来比较原子之间的距离,但它的工作原理与我希望的不同。代码如下:

for k in ResListA:
  for n in ResListB:
    for m in ResListA[counter3].atoms:
        for z in ResListB[counter4].atoms:
            coordDist = distance.distance(ResListA[counter3].atoms[counter4],ResListB[counter2].atoms[counter1])
            counter1 = counter1 + 1
        counter1 = 0         
        counter4 = counter4 + 1 
    counter4 = 0
    counter2 = counter2 + 1
  counter2 = 0
  counter3 = counter3 + 1
基本上我想要的是两人之间的最小距离

ResListA[0]。原子[0,…,n]

ResListB[0,…,k]。原子[0,…,m]

待计算。然而,它计算

ResListA[0]。原子[0]

ResListB[0,…,k]。原子[0,…,m]

例如:

ResListA[N,p,C,N,C]ResListB[C,C][p,p]

应该是

地区(N,C)地区(N,C)地区(p,C)地区(p,C)

不是

地区(N,C)地区(N,C)地区(N,p)地区(N,p)


提前谢谢。

我认为您的代码可以写得更像这样

for k in ResListA:
    for n in ResListB:
        for m in k.atoms:
            for z in n.atoms:
                coordDist = distance.distance(m.atoms, z.atoms)

不知道距离是什么。距离是什么。您不应该使用
coordDist
做一些涉及
min()

的事情吗?虽然gnibbler可能是正确的,这是您应该做的事情,但这就是您当前的代码简化为:

for k in ResListA:
    for n in ResListB:
        for counter4, m in enumerate(k.atoms):
            for counter1, z in enumerate(ResListB[counter4].atoms):
                coordDist = distance.distance(m, n.atoms[counter1])
您的问题是您需要:

for z in ResListB[counter2].atoms:
而不是

for z in ResListB[counter4].atoms:

这很吓人,缩进似乎不太正确。在分配任何内容之前,您似乎正在使用
counter1
。如果您可以接受Numpy/Scipy依赖项,这看起来确实是一项工作,因为您正在进行成对距离。我很乐意使用lib和插件以及一些有用的东西,但是我有一个任务,我自己做。我想你指的是
距离。距离(m,z)
。距离是一个模块,我用它来计算简单的三维距离。总的来说,我试图得到一个含有原子的氨基酸之间最小距离的矩阵,我想计算其中的距离。@gnibbler,测试了你的代码,它给出了相同的结果,它仍然通过了所有
ResListB
ResListA