猿问

没有 .sorted 的第二大整数

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 None

print(second_largest([2,2,2,-2]))

当我运行此代码时,输出为None,但我需要它,-2而且我不能使用 .sorted 和其他函数作为数组。我认为问题出在second = 0,但我不知道如何解决。


温温酱
浏览 221回答 3
3回答

弑天下

这是我看到的几个问题。您实例化first和second不正确(如果人数最多的是什么样的负面)?您唯一想要返回 None 的情况是您的列表大小小于 2。将您的退货条件更改为return second。def second_largest(numbers):&nbsp; &nbsp; if len(numbers) < 2:&nbsp; &nbsp; &nbsp; &nbsp; return None&nbsp; &nbsp; first, second = numbers[0], numbers[1]&nbsp; &nbsp; if first < second:&nbsp; &nbsp; &nbsp; &nbsp; first, second = second, first&nbsp; &nbsp; for n in numbers[2:]:&nbsp; &nbsp; &nbsp; &nbsp; if n > first:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first, second = n, first&nbsp; &nbsp; &nbsp; &nbsp; elif n > second:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; second = n&nbsp; &nbsp; return second

芜湖不芜

不确定这是否是您要查找的内容,但您基本上可以从列表中取出最大的元素(或记下它),然后在剩下的元素中搜索第二大的元素。在这里,我首先使用max()(适用于任何可迭代对象的 Python 内置函数)来获取列表的最大元素,然后使用列表理解来创建不等于最大元素的第二个元素列表元素,最后max()再次使用从原始列表中获取第二大元素。def second_largest(numbers):&nbsp; &nbsp; first = max(numbers)&nbsp; &nbsp; second = max([i for i in numbers if i != first])&nbsp; &nbsp; return secondfor如果max()出于某种原因不想使用,则可以为此使用循环。

胡子哥哥

不使用sorted?values = [2,2,2,-2]values.sort(reverse=True)&nbsp; &nbsp;# technically correctsecond_largest = values[1]或者,不那么滑稽values = set([2,2,2,-2])values.remove(max(values))second_largest = max(values)甚至import heapqheapq.nlargest(2, [2,2,2,-2])
随时随地看视频慕课网APP

相关分类

Python
我要回答