2016-11-07 113 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