为了账号安全,请及时绑定邮箱和手机立即绑定

没有 .sorted 的第二大整数

没有 .sorted 的第二大整数

温温酱 2021-08-14 16:44:10
def second_largest(numbers):    first = 0    second = 0    for n in numbers:        if n > first:            first, second = n, first        elif first > n > second:            second = n    return second or Noneprint(second_largest([2,2,2,-2]))当我运行此代码时,输出为None,但我需要它,-2而且我不能使用 .sorted 和其他函数作为数组。我认为问题出在second = 0,但我不知道如何解决。
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

这是我看到的几个问题。

  1. 您实例化firstsecond不正确(如果人数最多的是什么样的负面)?

  2. 您唯一想要返回 None 的情况是您的列表大小小于 2。

  3. 将您的退货条件更改为return second

def second_largest(numbers):

    if len(numbers) < 2:

        return None


    first, second = numbers[0], numbers[1]

    if first < second:

        first, second = second, first


    for n in numbers[2:]:

        if n > first:

            first, second = n, first

        elif n > second:

            second = n


    return second


查看完整回答
反对 回复 2021-08-14
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

不确定这是否是您要查找的内容,但您基本上可以从列表中取出最大的元素(或记下它),然后在剩下的元素中搜索第二大的元素。在这里,我首先使用max()(适用于任何可迭代对象的 Python 内置函数)来获取列表的最大元素,然后使用列表理解来创建不等于最大元素的第二个元素列表元素,最后max()再次使用从原始列表中获取第二大元素。


def second_largest(numbers):

    first = max(numbers)

    second = max([i for i in numbers if i != first])

    return second

for如果max()出于某种原因不想使用,则可以为此使用循环。


查看完整回答
反对 回复 2021-08-14
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

不使用sorted?


values = [2,2,2,-2]

values.sort(reverse=True)   # technically correct

second_largest = values[1]

或者,不那么滑稽


values = set([2,2,2,-2])

values.remove(max(values))

second_largest = max(values)

甚至


import heapq

heapq.nlargest(2, [2,2,2,-2])


查看完整回答
反对 回复 2021-08-14
  • 3 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号