避免重复并为for循环中的每个单例赋值

时间:2016-08-13 09:16:37

标签: python loops

我正在尝试处理复制以及为for循环中的每个单例赋值的失败。

首先,我创建从一个节点到连接到的节点的边:

ti = "D" #node from
lst = ["A", "B", "C"] #nodes to

packaged = [(ti, l) for l in lst]  # a list of edges (from - to)

l_lst = len(lst)  ## length of lst, *i.e.* degree of ti

weight = 1 / float(l_lst)  # edge weight, normalized by length of lst

for pair in packaged:
    print (packged, weight)  

这给了我

([('D', 'A'), ('D', 'B'), ('D', 'C')], 0.3333333333333333)
([('D', 'A'), ('D', 'B'), ('D', 'C')], 0.3333333333333333)
([('D', 'A'), ('D', 'B'), ('D', 'C')], 0.3333333333333333)

但是,我想要实现的目标是:

('D', 'A'), 0.3333333333333333
('D', 'B'), 0.3333333333333333
('D', 'C'), 0.3333333333333333

如何避免重复并为每对节点(边缘)分配权重?

谢谢!

2 个答案:

答案 0 :(得分:3)

你需要的是:

ti = "D" #node from
lst = ["A", "B", "C"] #nodes to

packaged = [(ti, l) for l in lst]  # a list of edges (from - to)

l_lst = len(lst)  ## length of lst, *i.e.* degree of ti

weight = 1 / float(l_lst)  # edge weight, normalized by length of lst

for pair in packaged:
    print (pair, weight)  

for for循环使用pair代替packaged

答案 1 :(得分:3)

一个简单的解决方法:

for pair in packaged:
    print (pair, weight)