2016-12-15 69 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}