嵌套的Python while循环用于矢量比较

时间:2020-10-29 06:51:46

标签: python python-3.x loops

我有一个函数part,它随机产生长度为n*k的数字数组,但要遵循一定的分布。我还有一个函数check_diff,它根据这些向量之间的某种相似度返回True/False。这不是真的相关。我想构建一个函数output,该函数创建1000个这样的向量,然后将其排在列表的首位(potential[0])并将其放入新的列表final。然后,它在v中寻找potential的另一个向量check_diff(potential[0], v) == 1。在这种情况下,向量将附加到final。现在,我想在v1中寻找另一个向量potential,使check_diff(potential[0], v1) == 1check_diff(v, v) == 1。在这种情况下,v1会附加在final等后面。

这是一个非常基本的循环问题,但是无论如何我还是无法解决。这是代码段。

def output(n,k):
    potential = [part(n,k) for i in range(1000)]
    final = [potential[0]]
    i = 0
    while(i in range(len(potential))):
        j = 0
        while(j in range(len(final))):
            if check_diff(final[j], potential[i]) == 0:
                potential.remove(potential[i])
                break
            if check_diff(final[j], potential[i]) == 1:
                final.append(potential[i])
    return final

编辑:让我添加另一个尝试,但是仍然无法正常工作

def output(n, k):
    potential = [part(n, k) for i in range(300000)]
    final = [potential[0]]

    i=1
    while(i < len(potential)):

        for j in range(len(final)):
            temp = []
            if check_diff(final[j], potential[i]) == 1:
                temp.append(1)
            if sum(temp) == len(final):
                final.append(potential[i])
                potential.remove(potential[i])
        i = i + 1
    return final

1 个答案:

答案 0 :(得分:0)

您忘记更新ij,并且您的语法有点像forwhile的混合体。 这是解决问题的方法:

def output(n,k):
    potential = [part(n,k) for i in range(1000)]
    final = [potential[0]]
    i = 0
    while(i < len(potential)):
        j = 0
        while(j < len(final)):
            if check_diff(final[j], potential[i]) == 0:
                potential.remove(potential[i])
                break
            
            if check_diff(final[j], potential[i]) == 1:
                final.append(potential[i])
            j += 1

        i += 1
    return final

相关问题