This should work. I would loop on both tunnel and router twice, and if the inner loop's router and tunnel matches the outer loop's router and tunnel, we make it up, else we make it down
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)
Sample output is
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
A bad list-comprehension approach will be.
[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]
You can also use itertools
to create a cartesian product itertools.product and then iterate through them.
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)