3 回答

TA贡献1818条经验 获得超8个赞
这是我看到的几个问题。
您实例化
first
和second
不正确(如果人数最多的是什么样的负面)?您唯一想要返回 None 的情况是您的列表大小小于 2。
将您的退货条件更改为
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

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()出于某种原因不想使用,则可以为此使用循环。

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])
添加回答
举报