是否有办法获取父列表,如果给出了一些元素?例如,我有两个列表a
和b
,我想要
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
排序。
答案 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
,只需使用argmin
和argmax
。
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))