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. Aug 18 '16 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 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]):

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.