通过循环结构深入理解最大值与最小值的查找

1.引言

        在之前,我们已经学习了如何使用 max()min() 函数来比较大小,这些函数对于处理简单的数据集非常方便。然而,当我们面对大量数据时,仅仅依靠这两个函数可能并不足够。在这种情况下,我们可以借助循环结构,通过逐个元素的比较来实现相同的目标。现在,让我们来看一下如何使用循环来找到数据中的最大值和最小值。

2.寻找最大值

largerst_so_far = -1

print('before', largerst_so_far)

for the_num in [10,40,13,4,73,19]:

    if the_num > largerst_so_far:

        largerst_so_far = the_num

    print(largerst_so_far, the_num)

print('after', largerst_so_far)

#before -1
#10 10
#40 40
#40 13
#40 4
#73 73
#73 19
#after 73

我们创建了一个名为largerst_so_far(目前最大)的变量,并赋值为-1(你应该有所注意到集合中的数字都为正数),随后我们会创立一个迭代变量the_num,这个变量会依次通10,40,13,4,73,19,将这一区域的代码运行6次,我们第一次遇到的数字是10,这可比-1大多了,所以依照循环,我们将largerst_so_far=-1更新为the_num=10,即largerst_so_far=10,继续40>10,更新,再往下,哦哦13<40,所以不更新,同样的4不更新,73更新,19不更新,输出73,我们顺利的找到了集合当中的最大值,也就是73,这很容易吧,你可以通过删去,或者运用‘#’,使得输出的结果更加清爽

        顺利找到了最大值,那我们又该如何寻找最小值呢?还有一种情况,如果集合里面全是负数我们该怎么处理呢?请你先试着修改上方最大值的代码,试一下自己能否解决这个问题

3.寻找最小值

        首先让我们对代码做一些修改,把>换成<,把large换成small,做到这一步你已经很棒了,让我们来试运行一下,结果是4吗?

smallest_so_far = -1

print('before', smallest_so_far)

for the_num in [10,40,13,4,73,19]:

    if the_num < smallest_so_far:

        smallest_so_far = the_num

    print(smallest_so_far, the_num)

print('after', smallest_so_far)

#before -1
#-1 10
#-1 40
#-1 13
#-1 4
#-1 73
#-1 19
#after -1

显然,结果不是4,我提供的代码是错的,初始值是-1,比集合中的任何一个数都要小,所以输出的值是-1,那我们错在哪里?

        首先smallest代表不了任何东西,如同我之前提及的一样它没有意义,可以是x可以是y可以是任何东西,仅仅改变变量名没有任何用,我们代码中真正错误的地方在于“-1”,那么什么值合适呢?100?那如果集合中都是三位数呢?1,000?10,000?听着就很麻烦对吧

4.空类型值(None Type)

        -1并不是一个有意义的值,它更像是一个旗帜(flag)告诉我们还没有进行循环,现在让我们引入None类型,None类型函数只有一个常量,也就是它自己None,我们可以把它理解为什么都不是什么都没有,让我们尝试把初始值设定为None,正如它的名字一样,我们还没有见到过任何一个数字呢

smallest_so_far = None

print('before', smallest_so_far)

for the_num in [10,40,13,4,73,19]:

    if smallest_so_far is None:

        smallest_so_far = the_num

    elif the_num < smallest_so_far:

        smallest_so_far = the_num

    print(smallest_so_far, the_num)

print('after', smallest_so_far)

#10 10
#10 40
#10 13
#4 4
#4 73
#4 19
#after 4

首先我们让程序判断smallest_so_far是不是等于None(is的使用要比==更加的严格,我们一般只在判断对错的情况下用is、is not),好的是的,我们将其更新赋值为the_num,之后的代码更加的智能,None意味着这是第一次的循环,而在后面第二次第三次的循环中,if永远不成立,我们转而执行elif的指令,直到找到最小值4,直到完成对集合的循环

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chennn__

感谢!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值