3 回答

TA貢獻(xiàn)1818條經(jīng)驗 獲得超8個贊
這是我看到的幾個問題。
您實(shí)例化
first
和second
不正確(如果人數(shù)最多的是什么樣的負(fù)面)?您唯一想要返回 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貢獻(xiàn)1796條經(jīng)驗 獲得超7個贊
不確定這是否是您要查找的內(nèi)容,但您基本上可以從列表中取出最大的元素(或記下它),然后在剩下的元素中搜索第二大的元素。在這里,我首先使用max()(適用于任何可迭代對象的 Python 內(nèi)置函數(shù))來獲取列表的最大元素,然后使用列表理解來創(chuàng)建不等于最大元素的第二個元素列表元素,最后max()再次使用從原始列表中獲取第二大元素。
def second_largest(numbers):
first = max(numbers)
second = max([i for i in numbers if i != first])
return second
for如果max()出于某種原因不想使用,則可以為此使用循環(huán)。

TA貢獻(xiàn)1825條經(jīng)驗 獲得超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])
添加回答
舉報