【问题标题】:How can I find the minimum in Python? [closed]如何在 Python 中找到最小值? [关闭]
【发布时间】:2022-10-17 15:43:16
【问题描述】:

此函数查找最大值和最小值。

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)

最大值正常出现,但最小值作为第一个数组值出现。我找不到问题所在。

【问题讨论】:

  • 请包括样本输入、实际输出和预期输出。
  • 你能举个例子和你想要的输出吗?从第一个元素开始,最小值应该是正确的。因为你在范围内循环,其中最小值将始终是第一个元素
  • 您在每次迭代时都将minmax 重置为array[0]。那些应该是外部的循环。

标签: python


【解决方案1】:

最大值正常出来

我认为它只是因为你的第一个或最后一个值是序列的最大值。因为您完全重置了minmax在每次迭代中.所以整个循环是没用的,任何迭代,但最后一次都没有效果。

初始化应该是外部循环,而不是它内部:

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]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]

现在为了进一步改进,假设您正在尝试学习,我们将忽略 minmax 已经是内置函数,因此整个事情是多余的(尽管您应该不是将您自己的变量命名为与内置变量相同,因为这会造成混淆):

  • n 没用,因为它没有针对array 进行检查,并且array 有自己的长度,n 只能在超过len(array) 时触发不必要的错误,或者如果它小于len(array),则跳过项目。 n 可能有用,例如输入是在经过验证的input() 调用循环中收集的,但事实并非如此。
  • 良好的错误处理可能会检查数组的长度是否至少为 1,否则脚本会崩溃(尽管在转换为整数之前还需要检查各个输入值是否有效,所以...)
  • 您可以在同一个循环中提取最小值和最大值,无需循环两次(在这种情况下可能不是很重要)。
  • 但是 Python 对迭代器也有很好的支持,所以你应该避免在不必要的时候显式索引,这里没有。

我的看法,仍然在努力学习的范围内,将是:

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] 也可以在“单例”数组上解决问题:)。
【解决方案2】:

为此,请使用 python 中的 min 和 max 关键字。

例如。

my_list = [0, -5, 3, 1, 10]
min_value = min(my_list)
max_value = max(my_list)
print(f'Min value: {min_value}, max value: {max_value}')

【讨论】:

  • 虽然不是一个坏建议,但这并不能回答问题。最佳实践可以作为答案的一部分,但您尝试回答时应该解决所提出的问题。 -1
  • 如上所述的问题是“如何在 Python 中找到最小值”。严格来说,min 内置函数完整地回答了这个问题。
  • @Masklinn:与你能教我什么是错的吗?标题中所述的问题变得更加详细。最后发现maxmin 不是一个选项,所以...这不能回答问题如所述克里斯是正确的。您通常应该始终阅读到最后以了解问题的含义。
  • 问题是您每次迭代都会重置最小/最大变量。如果您将行 min = array[0] 移到循环之外,它应该可以工作,您也可以摆脱 if i &gt; 0 条件
  • @awied1404:通常值得知道:您可以通过编辑自己的答案来改进它们。在您自己的答案的 cmets 中,您可以回答有关答案的问题或提示,或者在 cmets 中留下一个注释,说明答案已更新,回答问题或实施 cmets 中提供的提示。
【解决方案3】:

你只想要用户输入的整数列表的最小值和最大值吗?为此使用 python 的内置函数:

list_of_user_input = []
n_input = int(input("How many variables do you want to enter: "))
for i in range(0, n_input):
    number = int(input(f"Enter variable {i + 1}: "))
  
    list_of_user_input.append(number) 

print(f"The min of your list is {min(list_of_user_input)}")
print(f"The max of your list is {max(list_of_user_input)}")

【讨论】:

  • 虽然不是一个坏建议,但这并不能回答问题。最佳实践可以作为答案的一部分,但您尝试回答时应该解决所提出的问题。 -1
  • 谢谢你!!但我必须在没有内置功能的情况下实现:(
猜你喜欢
  • 2022-12-10
  • 2014-02-17
  • 2013-07-02
  • 1970-01-01
  • 2019-12-09
  • 2022-11-19
  • 2020-03-04
  • 1970-01-01
相关资源
最近更新 更多