2016-12-15 60 views
0
for i in range(4): 
     for j in V[i].customers: 
      V[i].message =\ 
          dict([(k,array([1,1])) \ 
           for k in V[i]. customers]) 

我完全不理解这个结构。有人能解释这是如何工作的吗?三重for python中的循环,主要困惑

另外,那=\它是做什么的?

+0

笑,如果我能有一美元每这里有人张贴一个坏编写的代码的时间,并要求我们解释一下......在\是为了能够继续写剩下的加代码换行 – alfasin

+0

这不是一个三重循环。你是否缺少一些代码? – mrogers

+0

@ mrogers确实,我现在纠正了这个问题 – Xptrz

回答

0

由于作者选择使用\换行延续,该行有些令人困惑。该行更容易阅读没有这些:

for i in range(4): 
    for j in V[i].customers: 
     V[i].message = dict((k, array([1,1])) for k in V[i].customers) 

我也删除列表理解,没有它的代码更快。 dict()调用中的循环现在是生成器表达式,并且它产生(key, value)元组对,dict()变成字典。

因此,对于4个不同的V[i].customers序列,相应的V[i].message属性被重复设置为相同的字典。这是相当无用的,因为j甚至没有使用,所以for j循环可能只是被删除:

for i in range(4): 
    V[i].message = dict((k, array([1,1])) for k in V[i].customers) 

接下来,如果V只有四项指标,你可以直接通过更换range()用循环V

for v in V: 
    v.message = dict((k, array([1,1])) for k in v.customers) 

,如果这段代码被设计为在Python 2.7版或更高版本(如果这样的Python 2.6的兼容性不是必需的)运行,可以取代后者用字典解析

for v in V: 
    v.message = {k: array([1,1]) for k in v.customers}