此函数查找最大值和最小值。
n=int(input()) array=list(map(int,input().split)) for i in range(n): max=array[0] if i>0: if max<array[i]: max=array[i] for i in range(n): min=array[0] if i>0: if min>array[i]: min=array[i] print(max,end='') print( min)
最大值正常出现,但最小值作为第一个数组值出现。我找不到什么问题:(
你能教我什么是错的吗?
太感谢了!
最大值正常出来
我认为它只是因为你的第一个或最后一个值是序列的最大值。因为您在每次迭代时min都完全重置。所以整个循环是没用的,任何迭代,但最后一次都没有效果。max
min
max
初始化应该在循环之外,而不是在循环内部:
max=array[0] for i in range(n): if i>0: if max<array[i]: max=array[i] min=array[0] for i in range(n): if i>0: if min>array[i]: min=array[i]
此时对索引的检查显然是不必要的:要么吃掉不必要的array[0]to比较array[0](它本身无害),要么在迭代时跳过索引:
array[0]
max=array[0] for i in range(1, n): if max<array[i]: max=array[i] min=array[0] for i in range(1, n): if min>array[i]: min=array[i]
本质上,您编写了一个非常复杂的版本:
if array[0] < array[-1]: max = array[-1] else: max = array[0] if array[0] > array[-1]: min = array[-1] else: min = array[0]
现在为了进一步改进,假设您正在尝试学习,我们将忽略它min并且max已经是内置函数,因此整个事情是多余的(尽管您不应该将自己的变量命名为与内置函数相同,因为造成混乱):
n
array
len(array)
input()
我的看法,仍然在努力学习的范围内,将是:
array=list(map(int,input().split)) low = high = array[0] for candidate in array[1:]: if candidate > high: high = candidate if candidate < low: low = candidate print(f"{low} ... {high}")
另一个有趣的替代方法是对数组进行排序并获取已排序数组的第一个和最后一个元素:
array=list(map(int,input().split)) low, *_, high = sorted(array) print(f"{low} ... {high}")
尽管它的缺点是它仅适用于长度为 2+ 的数组,而原始数组适用于“单例”数组。
sa=sorted(array); low=sa[0] ; high=sa[-1]也可以在“单例”数组上解决问题:)