我正在尝试简化我的代码,但答案是错误的

时间:2018-06-04 13:50:01

标签: python

这是我的代码(它是对的):

 if __name__ == '__main__':
    n = int(input())
    arr = map(int, input().split())
    l = list(set(sorted(arr)))
    l.remove(max(l))
    print(max(l))

但我想这样做(pythonic):

if __name__ == '__main__':
    n = int(input())
    arr = map(int, input().split())
    l = list(set(sorted(arr)))
    print(l.remove(max(l)))

所以..当我这样做时,我的代码只是打印:

  

打印(l.remove(MAX(1)))

     

有什么问题?我只想简化我的代码。

任务:我有一个列表,我希望打印第二个最高分。

3 个答案:

答案 0 :(得分:5)

看看documentationI#compareTo(I)方法是一种修改列表就地的方法。也就是说,它会修改您调用它的列表,而不是返回具有所需更改的新列表。

由于此函数不返回任何内容,因此打印list.remove会为您提供“无”。要删除元素打印列表,您必须坚持使用原始代码。

答案 1 :(得分:2)

将地图对象转换为set()的集合,使用sorted()转换为排序列表,并使用[-2]取第二个元素:

print(sorted(set(arr))[-2])

在我看来,这更像是Pythonic,而不是删除max,然后打印新的max,因为它更清晰,并且步骤更少。

答案 2 :(得分:1)

您应该使用heap而不是排序。您可以在O(n)时间内构建堆 并且在O(n)时间内返回k最大项(对于任何常数k);排序需要O(n lg n)时间。

import heapq

n = int(input())
arr = [int(x) for x in input.split()]
heapq.heapify(arr)   # In-place; does not return the heapified list.
print(heapq.nlargest(2, arr)[-1])