2016-03-16 28 views
0

我想將以下內容轉換爲列表理解。處理列表理解輸出逐元素

def list3function(): 
for i in list3: 
    print(i) 
input() 
list1 = [[[1, 1],[1, 2]],[[1, 3],[1, 4]]] 
list2 = [[[2, 2],[2, 1]],[[2, 2],[2, 1]]] 
list3 = [] 
for a in list1: 
for b in list2: 
    for c in a: 
    for d in b: 
    list3.append(c[1]/d[1]) 
    list3function() 
    list3 = [] 

輸出如下:

0.5 
1.0 
1.0 
2.0 

0.5 
1.0 
1.0 
2.0 

1.5 
3.0 
2.0 
4.0 

1.5 
3.0 
2.0 
4.0 

下面的作品,但我怎麼把它傳遞給函數元素的元素?在 上面的例子是在「for c in a:」之後完成的。

list3 = [[x[1]/y[1] for x in i for y in j] for i in list1 for j in list2] 

我不想創建並處理完整的list3,因爲它會很大。

+0

除了我的回答,你可以使用'print(* list3,sep ='\ n')'代替'in list3:print(i)'打印出少於1個字符的列表。 –

+0

我注意到你2年前有一個非常類似的問題[在這裏問](http://stackoverflow.com/questions/21605674/optimizing-loop-faster-resultlist-append-cd-c1-d1-array-map) ,你還在試圖解決同樣的問題嗎? –

+0

是的,我仍然在努力提高速度。 – user3180110

回答

0

你可以把內部的兩個在列表理解循環:

list1= ... 
list2 = ... 
for a in list1: 
for b in list2: 
    list3=[c[1]/d[1] for c in a for d in b] 
    list3function() 

這可能是這樣做,雖然因爲你是清楚的代碼打高爾夫,你也可以只遍歷你想通了,作爲表達的最好方式list3作爲迭代變量:

for list3 in ([c[1]/d[1] for c in a for d in b] 
       for a in list1 for b in list2): 
    list3function() 

這真的只是一個行for循環:

for list3 in ([c[1]/d[1] for c in a for d in b] for a in list1 for b in list2):list3function()