我想根据方法的参数对方法中的列表进行排序
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)))
我有一个方法,作为参数,我输入一个点的 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)))