繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM