【问题标题】:I want to sort a list in a method with respect to the method's argument我想根据方法的参数对方法中的列表进行排序
【发布时间】:2015-05-03 16:11:23
【问题描述】:

我有一个方法,作为参数,我输入一个点的 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 的方式来做到这一点,但这种方法需要两个参数而不是一个。 那我该怎么做呢?

【问题讨论】:

    标签: python list sorting key


    【解决方案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)))
    

    【讨论】:

    • 是的!那是我一直在寻找的,非常感谢:)
    • 您实际上并不需要所有的值; max 只需要一次查看一个并保持迄今为止最大的。在 Python 2 中,这节省了预先构建整个列表的时间;在 Python 3 中,内置的 map 可以正常工作。
    • (出于同样的原因,我刚刚将 range 更改为 xrange 以用于 Python 2。)
    猜你喜欢
    • 2017-09-30
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多