Python:获取父列表

时间:2014-03-15 08:25:17

标签: python list numpy

是否有办法获取父列表,如果给出了一些元素?例如,我有两个列表ab,我想要

def func(a,b):
    mx = max(a[0], b[0]);
    mn = min(a[0], b[0]);
    return (the list that corresponds to (mx, mn) in the order)

修改:对于上面的示例,简单的if else就足够了;但是我想知道如果我处理很多列表怎么做,并且想按照比较的顺序返回列表的名称?我可以提出的一个解决方案是使用numpy排序,它使用n log(n)排序算法。有更快的方法吗?

编辑:可能正在使用numpy排序。

3 个答案:

答案 0 :(得分:1)

不,这是不可能的。但您可以使用conditional expression获取与第一个元素的最大值相对应的列表,如此

a, b = [1, 2], [2, 1]
c = a if a[0] > b[0] else b
print c
# [2, 1]

因此,您的函数可以写成

def func(a,b):
    return a if a[0] > b[0] else b

答案 1 :(得分:1)

由于您提到numpy,只需使用argminargmax

def func(a,b):
    lists = (a, b)
    vals = np.array([a[0], b[0]])
    return ( lists[np.argmax(vals)], lists[np.argmin(vals)] )

这可以很容易地推广到两个以上的列表,如果所有列表的长度相同,func可以优雅地处理2dim数组,例如:

def func(arr):
    return ( arr[np.argmax(arr[:,0])], arr[np.argmin(arr[:,0])] )

答案 2 :(得分:0)

您可以使用max函数的关键参数。

import operator
def func(a,b):
    return max(a, b, key=operator.itemgetter(0))