我试图在列表中找到第二大数字,并考虑将列表转换为set,并将其转换回list,以消除重复的值。不幸的是,负值取了集合的最后一个索引(在这里,我期望最大的值占据集合中的最后一个索引)。List包含负值和正值。将其转换为set时,负值取最后一个索引。
n = 5
arr = [57, 57, 57, -57, 57]
res = list(set(arr))
print(res[-2])我希望这是我的输出:
-57但我得到的是:
57怎样才能在列表中找到第二大数字?
发布于 2019-06-09 13:19:10
集合具有任意排序。您不能依赖于任何特定的排序(它根本不是语言规范的一部分,因此它可以从一个版本更改到另一个版本,甚至可以在理论上和实践中运行字符串)。
要么对list排序,要么使用heapq.nlargest查找第二大数字。在这两种情况下,set只对去重复有用,您需要将其转换回list以获得有用的排序。
发布于 2019-06-09 13:53:20
这里
arr = [57, 57, 57, -57, 57]
# If you want to avoid duplicates:
second_largest = sorted(list(set(arr)))[-2]
# If you dont care about duplicates:
second_largest = sorted(arr)[-2]https://stackoverflow.com/questions/56514869
复制相似问题