我有一个 n*n 网格网络,其中每个节点的值为 (0,0),(0,1)...(n-1,n-1)。我需要添加一条边,以便网络的平均路径长度 (APL) 减少。为此,我必须选择每个节点,为每个其他节点画一条边并检查 APL。
所以我为此做了一个嵌套的for循环:
for x,y in itertools.product(range(n), range(n)):
for i,j in itertools.product(range(x,n), range(n)):
此处外部 for 循环选择第一个节点,内部 for 循环选择第二个节点。 range(x,n)
稍微减少了迭代次数,类似地,有没有办法将内部 for 循环中的 range(n)
更改为其他内容,例如可以减少迭代次数吗?
我尝试使用 range((y+1)%n,n)
但它不起作用,因为假设第一个节点是 (0,n-1),然后在选择第二个节点之后节点为(0,n),它不会选择(1,0)。那么有没有办法优化这个呢?
最佳答案
如果我理解正确,只需在索引和循环上使用模数即可。
循环遍历相同的索引两次,然后在相同的索引上继续
,例如:
for x, y in itertools.product(range(n), repeat=2):
for i, j in itertools.product(range(n), repeat=2):
if (x, y) == (i, j):
continue
add_edge((x, y), ((x+i)%n, (y+j)%n))
...
关于python - 网格遍历的嵌套for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50718293/