如何获取元组列表的元素

2024-05-16 10:21:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组节点

nodes = ["uno","dos","tres","cuatro","cinco","seis"]

还有一组边

edges = [("uno", "dos"),
     ("uno", "tres"), 
     ("dos", "tres"), 
     ("dos", "cuatro"), 
     ("tres", "cuatro"), 
     ("tres", "cinco"), 
     ("cuatro", "cinco"), 
     ("cuatro", "seis"), 
     ("cinco", "seis")]

我已经定义了这些边的倒数

inverses =[(j,i) for (i,j) in edges]

现在我有了一组弧

arcs = edges + inverses

我的问题是,我想得到弧集合中的所有元素,这些元素有一个确定的第一个元素。就是这样

ArcsOut[i in nodes] = [(i,j) for (i,j) in arcs for i in nodes for j in nodes].

我想得到这样的东西。如果我要得到所有第一个分量为“uno”的弧,我想:

ArcsOut["uno"]= [("uno", "dos"),("uno", "tres"),("dos", "uno"),("tres", "uno")] 

但我不知道我怎么能点这个。 提前谢谢!你知道吗


Tags: in元素for节点unonodesseisedges
2条回答

你可以用列表来完成。很好的一点是,您可以将元组解包与条件一起使用,使其非常简短,切中要害,同时具有可读性。你知道吗

arc_out = {node: [(i, j) for i, j in arcs if i == node] for node in nodes]

相反,如果您想获得其中ij匹配特定节点名的所有边,可以这样做

[edge for edge in arcs if 'uno' in edge]

使用以下语法创建字典:

ArcsOut = dict(((i,[(k,l) for k,l in arcs if k == i]) for (i,j) in arcs))

然后ArcsOut['unos']=所需输出。你知道吗

/*编辑*/

性能方面考虑使用defaultdict

ArcsOut = defaultdict(list)
for k, v in arcs:
    ArcsOut[k].append((k,v)) 

相关问题 更多 >