2015-05-03 32 views
1

我有一个方法和一个参数,我输入一个点的x和y坐标,然后计算达到该[x,y]坐标的功率从其他分和达到最低最高功率的顺序进行排序:我想对方法的参数排序方法中的列表

def power_at_each_point(x_cord, y_cord): 
    nodez_list = [nodes_in_room for nodes_in_room in range(1, len(Node_Positions_Ascending) + 1)] 
    powers_list = [] 
    for each_node in nodez_list: 
    powers_list.append(cal_pow_rec_plandwall(each_node, [x_cord, y_cord])) 
    return max(powers_list) 

我想这样做,更Python的方式就像key = cal_pow_rec_plandwall但这种方法有两个参数,而不是一个。 那我该怎么做呢?

回答

1

你只需要一个调用max,它将一个生成器作为参数。 lambda表达式只是为了使事情更具可读性。

def power_at_each_point(x_cord, y_coord): 
    f = lambda x: cal_pow_rec_plandwall(x, [x_coord, y_coord])  
    return max(f(each_node) for each_node in xrange(1, len(Node_Positions_Ascending) + 1)) 

您可以用电话代替发电机itertools.imap

from itertools import imap 

def power_at_each_point(x_coord, y_coord): 
    f = lambda x: cal_pow_rec_plandwall(x, [x_coord, y_coord]) 
    return max(imap(f, xrange(1, len(Node_Positions_Ascending) + 1))) 
+0

是的!那是我非常感谢你:) –

+0

为什么imap,不是地图? –

+0

你实际上并不需要所有的价值; 'max'只需要逐个查看它们,并保持迄今为止所见的最大值。在Python 2中,这节省了构建整个列表的时间;在Python 3中,内置的'map'可以正常工作。 – chepner