【问题标题】:Python: get parent listPython:获取父列表
【发布时间】:2014-03-15 08:25:16
【问题描述】:

如果给出了某些元素,有没有办法获取父列表?例如,我有两个列表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 排序方式。

【问题讨论】:

  • 我不知道你在尝试什么。您想对列表进行排序吗?您的代码似乎没有对列表进行排序。另外为什么需要使用numpy

标签: python list numpy


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

【讨论】:

  • 谢谢。但是如果我在处理大量列表,并且在比较某些元素之后,我想返回最大元素对应的列表,ifelse似乎不方便。
  • @Lelouch 你能举个例子解释一下吗?可能有一种方法可以满足您的期望
【解决方案2】:

既然你提到了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])] )

【讨论】:

    【解决方案3】:

    可以使用max函数的key参数。

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

    【讨论】:

      猜你喜欢
      • 2011-11-26
      • 2010-12-31
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      相关资源
      最近更新 更多