在 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
结构 nodes
和 edges
来维持秩序。只需使用节点和边作为字典键,然后在脚本末尾获取键列表。
因为@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
#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
结构 nodes
和 edges
来维持秩序。只需使用节点和边作为字典键,然后在脚本末尾获取键列表。
因为@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