2015-05-03 77 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