2016-11-07 119 views
0

我已經寫一個函數,它在若干輸入(見下面)自動更新功能輸入的Python

def actual_triangle(B, zone, midpoint, lengths): 

tri_reads_at_interval = {} 
for d in range(int(zone[0]),int(zone[1]), 1): 
    reads_in_ROI = {'T1':0, 'T2':0, 'T3':0, 'outside':0} 
    for x,y in get_reads_from(zone, midpoint, lengths): 
     c = which_triangle_equilateral(x,y,B,d) 
     reads_in_ROI[c] += 1 
    tri_reads_at_interval[d] = reads_in_ROI # Counts reads in each triangular regions at interval d 

return tri_reads_at_interval 

我有32個區和我想對每個區域自動運行功能。 B,中點和長度永遠不會改變。什麼是最好的方式來做到這一點?

+0

「做這件事的最好方法是什麼?」一個'for'循環。 – DeepSpace

回答

0

假設所有Bzonemidpointlengths定義和zones與您的區域列表,您可以使用map

results = list(map(lambda zone: actual_triangle(B, zone, midpoint, lengths), zones) 

或者,如果你想有一個更大的內存友好的方式

for result in map(lambda zone: actual_triangle(B, zone, midpoint, lengths), zones): 
    # do something with your result 
+0

明確的'for'循環在這裏更具可讀性。 '對於list_of_zones中的區域:actual_triangle(B,區域,中點,長度)'。如果OP需要函數的結果,甚至是列表理解:'res = [actual_triangle(B,區域,中點,長度)爲list_of_zones中的區域]' – DeepSpace

+0

儘管我同意你的說法,但理解時仍存在內存開銷列表。如果只有32個項目,這可能不是問題,但 –

+0

然後使用一個生成器:'res =(actual_triangle(B,區域,中點,長度)爲list_of_zones中的區域)' – DeepSpace