[英]I'm trying simplify my code but the answer is wrong
这是我的代码(正确):
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(l)))
没有
有什么问题? 我只想简化我的代码。
任务:我有一个列表,我想打印第二个最高分。
看一下文档 。 list.remove
方法是一种就地修改列表的方法。 也就是说,它修改了您调用它的列表,而不是返回您想要的更改的新列表。
由于此函数不返回任何内容,因此打印l.remove()
您“无”。 要在移除元素的情况下打印列表,您必须坚持原始代码。
使用set()
将地图对象转换为集合,使用sorted()
将其转换为排序列表,并使用[-2]
倒数第二个元素:
print(sorted(set(arr))[-2])
我认为,这比删除最大值然后打印新的最大值更清晰,并且可以用更少的步骤实现,因此比Python具有更多的Python风格。
您应该使用堆而不是排序。 您可以在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])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.