iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >20190125-找到列表第二大的数以及
  • 809
分享到

20190125-找到列表第二大的数以及

第二大列表 2023-01-30 23:01:52 809人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

1. 给定一个列表,找出列表第二大的值 思路:考虑列表是可能是乱序列表,并且可能存在两个相等的最大值的情况。 s1 = [34,33,2,1,6,7,7,44,3,23,23] 解法1:去重(解决可能存在两个相等的最大值),然后使用sor

1. 给定一个列表,找出列表第二大的值

思路:考虑列表是可能是乱序列表,并且可能存在两个相等的最大值的情况。

s1 = [34,33,2,1,6,7,7,44,3,23,23]

解法1:去重(解决可能存在两个相等的最大值),然后使用sort排序,然后然后通过切片取到第二大的值。tip,一定要先去重再排序,如果先排序再去重可能会打乱序列

s1 = [34,33,2,1,6,7,7,44,3,23,23]
s2 = list(set(s1))
s2.sort()
print(s2[-2])
#s2[-2]即为列表第二大的值

解法2:自己定义2个变量,与列表中的值一一对比,考虑对比的i的值大于最大值,以及处于最大值与第二大值之间的情况

def find_the_second_max_value(s):
    if isinstance(s,list):
        first_max_value=s[0]
        second_max_value=s[0]
        for i in range(len(s)):
            if s[i]>=first_max_value:
                second_max_value=first_max_value
                first_max_value=s[i]
            elif s[i]<first_max_value and s[i]>=second_max_value:
                second_max_vaule=s[i]
        return second_max_value
    else:
        return False
print(find_the_second_max_value(s1))

发散思考:自己写一个冒泡排序

冒泡排序思路

第一轮

s1 = [34,33,2,1,6,7,7,44,3,23,23]

第一步:34>33====》s1=[33,34,2,1,6,7,7,44,3,23,23]

第二步:34》2====》s1=[33,2,34,1,6,7,7,44,3,23,23]

第三步:34》1====》s1=[33,2,1,34,6,7,7,44,3,23,23]

一直比较到最后一位数,那么s1[0]和所有的数都比较了,第一轮比较结果为s1 = [33,2,1,6,7,7,44,3,23,23,34]

第二轮

s1 = [33,2,1,6,7,7,44,3,23,23,34]

第一步:33>2====》s1=[2,33,1,6,7,7,44,3,23,23,34]

第二步:33>1====》s1=[2,1,33,6,7,7,44,3,23,23,34]

第三步:33>6====》s1=2,1,6,33,7,7,44,3,23,23,34]

一直比较到最后一位数,那么s1[0]和所有的数都比较了,第二轮比较结果为s1 = [2,1,6,7,7,44,3,23,23,33,34],需要注意的一点是第二轮比较的步数应该比第一轮比较的步数少1,即33比较到最后一个23即可,因为33和34在第一轮已经比较过了

因此整体考虑使用两层循环来思想,第一层循环负责比较的轮数len(s)次,第二层循环负责每轮比较的步数len(s)-1-j次

def bubble_order(s,reverse=None):
    if reverse==None or reverse==False:
        for j in range(len(s)):
            for i in range(len(s)-1-j):
                if s[i]>s[i+1]:
                    temp = s[i+1]
                    s[i+1]=s[i]
                    s[i]=temp
    elif reverse ==True:
        for k in range(len(s)):
            for l in range(len(s)-1-k):
                if s[l]<s[l+1]:
                    temp = s[l+1]
                    s[l+1]=s[l]
                    s[l]=temp
    return s

 tips:决定每层循环的次数很重要,需要仔细思考

 

 

 

 

 

--结束END--

本文标题: 20190125-找到列表第二大的数以及

本文链接: https://www.lsjlt.com/news/180912.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作