# Shortest code to generate a full mesh of elements

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))

• Did you hear about meshpy ? Does it help you ? – Grajdeanu Alex. Aug 18 '16 at 18:11
• 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 – Mark Omo Aug 18 '16 at 18:13

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)