我正在尝试创建一个函数,其中我有一个带有一堆整数对的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))
答案 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处理可变对象的方式,例如某些深度优先搜索函数,因此,如果您知道如何使用它,请不要犹豫。