I am trying to find the shortest code that generates a full mesh of the elements fed into it in graphviz format e.g. the full mesh of [0, 1, 2] is:
2 -> 0
2 -> 1
1 -> 0
I have the code below and I think there might be a way to combine the if and for loops, and avoid needing to directly create the empty string
def graph(l):
if not l:
return ""
i = l.pop()
out = ""
for z in l:
out += " {}->{}\n".format(i, z)
return out + graph(l)
print graph(range(3))
-
\$\begingroup\$ Did you hear about meshpy ? Does it help you ? \$\endgroup\$Grajdeanu Alex– Grajdeanu Alex2016年08月18日 18:11:08 +00:00Commented Aug 18, 2016 at 18:11
-
\$\begingroup\$ I'm not trying to generate a mesh in the model sense but a mesh in the network topology sense where every node is connected to every other node, mostly I want to see how mutch smaller I can make the code \$\endgroup\$Mark Omo– Mark Omo2016年08月18日 18:13:34 +00:00Commented Aug 18, 2016 at 18:13
1 Answer 1
If I get it correctly, the shortest way that I can think of is by using itertools.combinations
. Basically, you want all unique combinations, so:
from itertools import combinations
def mesh(L):
return ["->".join(map(str, comb)) for comb in combinations(L, 2)]
Which will return:
['1->2', '1->3', '2->3']
For: mesh([1, 2, 3])
If you then want to print them as above, just:
for x in mesh([1, 2, 3]):
print(x)
Explore related questions
See similar questions with these tags.