在Python列表中找到第二大数字

时间:2019-06-09 13:12:45

标签: python python-3.x set

我试图在列表中找到第二大数字,并考虑将list转换为set,然后将其转换回list以消除重复的值。不幸的是,负值占据了集合中的最后一个索引(我期望最大值会占据集合中的最后一个索引)。列表包含负值和正值。转换为set时,负值取最后一个索引。

n = 5
arr = [57, 57, 57, -57, 57]

res = list(set(arr))
print(res[-2])

我希望这是我的输出:

-57

但是我得到的是:

57

如何找到列表中第二大的数字?

2 个答案:

答案 0 :(得分:0)

集具有任意顺序。您不能依赖任何特定的顺序(它根本不是语言规范的一部分,因此它可能因发行版本而异,甚至在理论上甚至在字符串上都可以运行)。

可以对DateTime now = DateTime.Now; TimeSpan past = now - now.Subtract(TimeSpan.FromSeconds(60)); TimeSpan post = now - now.Subtract(TimeSpan.FromSeconds(61)); Console.WriteLine(now); // Should be False: Passed time is less than 60 seconds Console.WriteLine(past.TotalSeconds > 60); // Should be True: Passed time is more than 60 seconds Console.WriteLine(post.TotalSeconds > 60); 进行排序,也可以使用list查找第二大数字。无论哪种情况,heapq.nlargest仅对重复数据删除都有用,您需要转换回set以获得有用的排序。

答案 1 :(得分:0)

这里

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]