我有一个函数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) == 1
和check_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
答案 0 :(得分:0)
您忘记更新i
和j
,并且您的语法有点像for
和while
的混合体。
这是解决问题的方法:
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