我想根据方法的参数对方法中的列表进行排序

I want to sort a list in a method with respect to the method's argument

我有一个方法,作为参数,我输入一个点的 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)

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

您只需要调用一次 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)))