在 python 中获取列表

get list in python

#ideal nodes list should be
['A','B','C','D','E','F','G','H','I','J','K','L','M','N']

所以我试图写一个定义来读取节点,edges.Here是我的代码,但它似乎不起作用。

""" read nodes"""
def rd_nodes(a):
    nline =[line.split(":")[1].replace(';',',').split(',') for line in a]
    for i in nline:
        return i

itertools.combinations 可以帮到你。

试试这个:

from itertools import combinations

s = """
1:A,B,C,D;E,F
2:G,H;J,K
&:L,M,N
"""

nodes = set()
edges = set()

for line in s.split():
    clusters = line.split(':')[1].split(';')
    for cluster in clusters:
        _nodes = cluster.split(',')
        nodes.update(_nodes)
        edges.update(combinations(_nodes, 2))

如果需要,您可以使用 collections.OrderedDict 结构 nodesedges 来维持秩序。只需使用节点和边作为字典键,然后在脚本末尾获取键列表。

因为@skovorodkin 有正确的答案,但是如果你想要纯 Python 版本(虽然我想知道为什么)你可以使用这个代码

s = """
1:A,B,C,D;E,F
2:G,H;J,K
&:L,M,N
"""
def combinations(nodes):
    if len(nodes) < 2:
        return (tuple(nodes))
    else:
        i = 1
        ret_tuple = []
        for n in nodes:
            rest = nodes[i:]
            for r in rest:
                ret_tuple.append(tuple([n,r]))
            i += 1

        return tuple(ret_tuple)

nodes = set()
edges = set()

for line in s.split():
    clusters = line.split(':')[1].split(';')
    for cluster in clusters:
        _nodes = cluster.split(',')
        nodes.update(_nodes)
        edges.update(combinations(_nodes))

print nodes
print edges