<p>这应该管用。我会在隧道和路由器上循环两次,如果内环的路由器和隧道与外环的路由器和隧道匹配,我们就补上,否则就补上</p>
<pre><code>def up(tunnel, router):
print('up', tunnel, router)
def down(tunnel, router):
print('down', tunnel, router)
for r1 in router:
for t1 in tunnel:
for r2 in router:
for t2 in tunnel:
if r1 == r2 and t1 == t2:
up(r1, t1)
else:
down(r2, t2)
</code></pre>
<p>样本输出为</p>
<pre><code>up 10.11.12.13 tunnel01
down 10.11.12.13 tunnel02
down 10.11.12.13 tunnel03
down 10.11.12.13 tunnel04
down 10.11.12.14 tunnel01
down 10.11.12.14 tunnel02
down 10.11.12.14 tunnel03
down 10.11.12.14 tunnel04
down 10.11.12.13 tunnel01
up 10.11.12.13 tunnel02
down 10.11.12.13 tunnel03
down 10.11.12.13 tunnel04
down 10.11.12.14 tunnel01
down 10.11.12.14 tunnel02
down 10.11.12.14 tunnel03
down 10.11.12.14 tunnel04
down 10.11.12.13 tunnel01
down 10.11.12.13 tunnel02
up 10.11.12.13 tunnel03
down 10.11.12.13 tunnel04
down 10.11.12.14 tunnel01
down 10.11.12.14 tunnel02
down 10.11.12.14 tunnel03
down 10.11.12.14 tunnel04
down 10.11.12.13 tunnel01
down 10.11.12.13 tunnel02
down 10.11.12.13 tunnel03
up 10.11.12.13 tunnel04
down 10.11.12.14 tunnel01
down 10.11.12.14 tunnel02
down 10.11.12.14 tunnel03
down 10.11.12.14 tunnel04
down 10.11.12.13 tunnel01
down 10.11.12.13 tunnel02
down 10.11.12.13 tunnel03
down 10.11.12.13 tunnel04
up 10.11.12.14 tunnel01
down 10.11.12.14 tunnel02
down 10.11.12.14 tunnel03
down 10.11.12.14 tunnel04
down 10.11.12.13 tunnel01
down 10.11.12.13 tunnel02
down 10.11.12.13 tunnel03
down 10.11.12.13 tunnel04
down 10.11.12.14 tunnel01
up 10.11.12.14 tunnel02
down 10.11.12.14 tunnel03
down 10.11.12.14 tunnel04
down 10.11.12.13 tunnel01
down 10.11.12.13 tunnel02
down 10.11.12.13 tunnel03
down 10.11.12.13 tunnel04
down 10.11.12.14 tunnel01
down 10.11.12.14 tunnel02
up 10.11.12.14 tunnel03
down 10.11.12.14 tunnel04
down 10.11.12.13 tunnel01
down 10.11.12.13 tunnel02
down 10.11.12.13 tunnel03
down 10.11.12.13 tunnel04
down 10.11.12.14 tunnel01
down 10.11.12.14 tunnel02
down 10.11.12.14 tunnel03
up 10.11.12.14 tunnel04
</code></pre>
<p>一个糟糕的列表理解方法将是。你知道吗</p>
<pre><code>[up(r1, t1) if r1 == r2 and t1 == t2 else down(r2, t2) for t1 in tunnel for r1 in router for r2 in router for t2 in tunnel]
</code></pre>
<p>还可以使用<code>itertools</code>创建笛卡尔积<a href="https://docs.python.org/3/library/itertools.html#itertools.product" rel="nofollow noreferrer">itertools.product</a>,然后遍历它们。你知道吗</p>
<pre><code>from itertools import product, tee
#Create cartesian production of router and tunnel, and convert to list
prod = product(router, tunnel)
#Convert iterator to list
li = list(prod)
#Loop through both lists and perform up/down accordingly
for r1, t1 in li:
for r2, t2 in li:
if r1 == r2 and t1 == t2:
up(r1, t1)
else:
down(r2, t2)
</code></pre>