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

2024-09-27 04:23:33 发布

您现在位置: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))

Tags: 函数fromreturnifdef整数数组array
1条回答
网友
1楼 · 发布于 2024-09-27 04:23:33

根据在列表的最低深度处取最大值是否重要,这可以通过以下方式完成:

如果在最低深度做什么无关紧要,只要它交替:

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处理可变项的方式,例如一些深度优先搜索函数,因此如果您知道如何使用它,请不要犹豫

相关问题 更多 >

    热门问题