这是我的代码(它是对的):
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)))
无
有什么问题?我只想简化我的代码。
任务:我有一个列表,我希望打印第二个最高分。
答案 0 :(得分:5)
看看documentation。 I#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])