用指针查找第二大数字的问题

时间:2019-07-13 15:41:19

标签: python

我制作了一个方法,该方法试图在没有指针的整数列表中查找第二大数字。当我传递具有第二大数字并排在第二大数字之前的任何整数列表时,我没有得到预期的结果。例如,当我通过[2, 6, 6, 2, 11]时,将得到输出:

Largest: 11
Second Largest: 2 

由于以下这一行,6从未分配给second_max

elif j > second_max and first_max != j:

如果删除第二个条件,则该方法可能会将重复项分配给first_maxsecond_max,而不会输出实际的第二大数字。

first_max=float('-inf')
second_max=float('-inf')

for i,j in enumerate(nums):
    if j > first_max:
        first_max=j
    elif j > second_max and first_max != j:
        second_max=j 

if first_max == float('-inf'):
    first_max,second_max=None,None

elif second_max == float('-inf'):
    second_max=None

print("Largest: {}".format(first_max))
print("Second Largest: {}".format(second_max))

希望对此有所帮助。

编辑:我知道有一个与此类似的帖子,但是它不能回答我处理重复项的问题。我希望该方法仅将重复项评估为一个数字。

此[5,5,4,2]和[2、6、6、2、11]的输出分别为:

最大:5 第二大:4

最大:11 第二大:6

2 个答案:

答案 0 :(得分:0)

当您找到新的first_max时,如@Thierry所提示的那样,旧的first_max应该变为second_max。

答案 1 :(得分:0)

如上一个答案所述。我还删除了枚举函数,因为它没有添加任何有用的东西。

nums = [1.0, 3.6, 2.2, 7.3, 5.1, 9.6, 1.1]
first_max=float('-inf')
second_max=float('-inf')

for j in nums:
    if j > first_max:
        second_max = first_max
        first_max=j
    elif second_max < j and j < first_max:
        second_max = j

if first_max == float('-inf'):
    first_max,second_max=None,None

elif second_max == float('-inf'):
    second_max=None

print("Largest: {}".format(first_max))
print("Second Largest: {}".format(second_max))