为什么查找无序列表的最小值和最大值的函数在某些情况下不起作用?

2024-06-01 07:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

这段代码应该通过将无序列表一分为二来递归地找到该列表的最小值和最大值。它每对半调用一次函数。有两个例外,如果列表只有一个项目,它只返回该项目作为最小值和最大值。如果列表有两个项目,则直接比较这两个项目,并返回相应的最小值和最大值。下面是代码

import random

unordered = [5, 2, 3, 1, 4]
#x = 0
#while x < 10:
#   unordered.append(random.randrange(0,100))
#   x += 1

print(unordered)

def minMax(x):
    if len(x) == 1:
        return x[0], x[0]
    if len(x) == 2:
        if x[0] > x[1]:
            max_ = x[0]
            min_ = x[1]
        else:
            max_ = x[1]
            min_ = x[0]
        return max_, min_
    if len(x) > 2:
        global min_, max_, maxA, maxB, minA
        a = x[:len(x)//2]
        b = x[len(x)//2:]
        maxA, minA = minMax(a)
        maxB, minB = minMax(b)
        if maxA > maxB:
            max_ = maxA
        if maxB > maxA:
            max_ = maxB
        if minA < minB:
            min_ = minA
        if minB < minA:
            min_ = minB
        return max_, min_

print(minMax(unordered))

出于某种原因,它返回(4,1)。 当我设置unordered=[1,2,3,4,5]时,它认为3是最小值,但它正确地将5标识为最大值


Tags: 项目代码列表lenreturnifrandommin
1条回答
网友
1楼 · 发布于 2024-06-01 07:16:41

因为unordered是一个列表。为什么不用Python's max function,而不是自己写呢

>>> unordered = [5, 2, 3, 1, 4]

>>> max(unordered)

5

否则为什么不做像

def min(list): min = none for x in list: if min == none: min = x elif x < min: min = x return min

相关问题 更多 >