我试图在列表中找到第二大数字,并考虑将list转换为set,然后将其转换回list以消除重复的值。不幸的是,负值占据了集合中的最后一个索引(我期望最大值会占据集合中的最后一个索引)。列表包含负值和正值。转换为set时,负值取最后一个索引。
n = 5
arr = [57, 57, 57, -57, 57]
res = list(set(arr))
print(res[-2])
我希望这是我的输出:
-57
但是我得到的是:
57
如何找到列表中第二大的数字?
答案 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]