如何使用递归在较大的数组中选择数组中的数字

时间:2019-02-07 03:43:55

标签: python

我正在尝试创建一个函数,其中我有一个带有一堆整数对的2d数组,例如array = [[2,3],[4,7],[6,1],[8,2]],它遍历该数组,在每对中选择较高的值,然后将它们分成对,然后一次又一次地执行此操作,在选择较高和较低的值之间交替,直到得到一个整数。 例如,

array = [[1,2],[3,4]] choose maximums from each pair
[2,4] pair the maximums up
[2] choose minimum

这是我到目前为止的代码。

array = [[1,2],[3,4]]
def choose(twoarray):
 if twoarray[1] > twoarray [2]:
   return twoarray[1]
 else:
   return twoarray[2] 

def combineArray(a):
  outputArray = []
  if not a:
    return 0
  return outputArray.append(choose(a[0])+combineArray(a[1:]))

print(combineArray(array))

1 个答案:

答案 0 :(得分:0)

取决于以最低的深度获取列表的最大是否重要,可以通过以下方式进行:

如果在最深处做什么无关紧要,只要它交替出现即可:

def min_max(x, mx=1):
    try:
        x[0][0]
    except TypeError:
        if mx == 1:
            return max(x)
        else:
            return min(x)
    if mx == 1:
        return max([min_max(i, 0) for i in x])
    else:
        return min([min_max(i, 1) for i in x])

如果有关系,这是一种解决方法:

def depth(l):
    depths = []
    for item in l:
        if isinstance(item, list):
            depths.append(depth(item))
    if len(depths) > 0:
        return 1 + max(depths)
    return 1

def min_max(x, mx=None):
    if mx == None:
        mx = depth(x) % 2
    try:
        x[0][0]
    except TypeError:
        return max(x)
    if mx == 1:
        return max([min_max(i, 0) for i in x])
    else:
        return min([min_max(i, 1) for i in x])

这两个都可以通过简单的操作来运行:

min_max([[2,3],[4,7],[6,1],[8,2]])

此外,正如您所知,我将避免在递归函数中使用列表。 Python处理可变变量的方式与您期望的有所不同,并且非常容易混淆。

话虽这么说,但某些递归函数实际上依赖python处理可变对象的方式,例如某些深度优先搜索函数,因此,如果您知道如何使用它,请不要犹豫。